diff --git a/contracts/escrow/build_output.log b/contracts/escrow/build_output.log
new file mode 100644
index 00000000..4ce46c7b
--- /dev/null
+++ b/contracts/escrow/build_output.log
@@ -0,0 +1 @@
+ Compiling stellar-xdr v21.2.0
diff --git a/contracts/escrow/errors.txt b/contracts/escrow/errors.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/contracts/escrow/escrow_conflicts.diff b/contracts/escrow/escrow_conflicts.diff
new file mode 100644
index 00000000..4e025b76
--- /dev/null
+++ b/contracts/escrow/escrow_conflicts.diff
@@ -0,0 +1,2881 @@
+diff --cc contracts/escrow/src/lib.rs
+index 1217c81,4063449..0000000
+--- a/contracts/escrow/src/lib.rs
++++ b/contracts/escrow/src/lib.rs
+@@@ -97,115 -45,14 +45,125 @@@ pub struct EscrowJob
+ #[contracttype]
+ pub enum DataKey {
+ Job(u64),
+++<<<<<<< HEAD
+ + Config, // Replaces separate Admin + AgentJudge entries
+ + JobLock(u64),
+ + JobRegistry,
+ + Locked,
+ + MultisigConfig(u64), // Per-job multisig configuration
+ + UpgradeAdmin,
+ + Treasury,
+ + Amended(u64),
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone, Debug, PartialEq)]
+ +pub struct TreasuryConfig {
+ + pub routing_address: Address,
+ + pub fee_bps: u32,
+++=======
++ Admin,
++ AgentJudge,
++ GuardFlag(u64),
++ Milestone(u64, u32),
+++>>>>>>> upstream/main
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+++<<<<<<< HEAD
+ +pub struct FeeConfigUpdatedEvent {
+ + pub treasury: Address,
+ + pub fee_bps: u32,
+ + pub updated_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct LockupUpdatedEvent {
+ + pub job_id: u64,
+ + pub expires_at: u64,
+ + pub updated_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct EmergencySweepEvent {
+ + pub job_id: u64,
+ + pub admin: Address,
+ + pub rescue_address: Address,
+ + pub amount: i128,
+ + pub swept_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct MilestonesAmendedEvent {
+ + pub job_id: u64,
+ + pub milestone_count: u32,
+ + pub remaining_amount: i128,
+ + pub amended_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct EscrowInitializedEvent {
+ + pub admin: Address,
+ + pub agent_judge: Address,
+ + pub initialized_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct AgentJudgeUpdatedEvent {
+ + pub old_agent: Address,
+ + pub new_agent: Address,
+ + pub updated_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct UpgradeAdminSetEvent {
+ + pub old_admin: Option
,
+ + pub new_admin: Address,
+ + pub updated_at: u64,
+ +}
+ +
+ +#[contracterror]
+ +#[derive(Copy, Clone, Debug, PartialEq, Eq)]
+ +pub enum EscrowError {
+ + AlreadyInitialized = 1,
+ + NotInitialized = 2,
+ + Unauthorized = 3,
+ + InvalidInput = 4,
+ + JobNotFound = 5,
+ + InvalidState = 6,
+ + AmountMismatch = 7,
+ + NoPendingMilestones = 8,
+ + JobRegistrySyncFailed = 9,
+ + UpgradeUnauthorized = 10,
+ + InvalidStateTransition = 11,
+ + ReentrancyDetected = 12,
+ + MultisigRequired = 13,
+ + InsufficientSignatures = 14,
+ + AlreadySigned = 15,
+ + ArithmeticError = 16,
+ + UpgradeAdminAlreadySet = 17,
+ + UpgradeAdminNotSet = 18,
+ + ArithmeticOverflow = 19,
+ + DisputeResolutionExpired = 20,
+ + FeeTooHigh = 21,
+ + NothingToSweep = 22,
+ + ReentrantCall = 23,
+ }
+
+ +/// Maximum platform fee, in basis points (100% = 10_000 bps).
+ +pub const MAX_FEE_BPS: u32 = 10_000;
+ +
+ #[contracttype]
+ #[derive(Clone)]
+++=======
+++>>>>>>> upstream/main
+ pub struct DisputeRaisedEvent {
+ pub job_id: u64,
+ pub initiator: Address,
+@@@ -214,430 -61,32 +172,284 @@@
+ pub raised_at: u64,
+ }
+
+++<<<<<<< HEAD
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct DepositEvent {
+ + pub job_id: u64,
+ + pub amount: i128,
+ + pub deposited_at: u64,
+ +}
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct ReleaseMilestoneEvent {
+ + pub job_id: u64,
+ + pub milestone_index: u32,
+ + pub amount: i128,
+ + pub released_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct OpenDisputeEvent {
+ + pub job_id: u64,
+ + pub initiator: Address,
+ + pub opened_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct JobRegistryConfiguredEvent {
+ + pub configured_by: Address,
+ + pub registry_contract: Address,
+ + pub configured_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct RegistryDisputeSyncedEvent {
+ + pub job_id: u64,
+ + pub registry_contract: Address,
+ + pub synced_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct ContractUpgradedEvent {
+ + pub by_admin: Address,
+ + pub new_wasm_hash: BytesN<32>,
+ + pub upgraded_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct BriefCanceledEvent {
+ + pub job_id: u64,
+ + pub refunded_amount: i128,
+ + pub canceled_by: Address,
+ + pub canceled_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone, Debug, PartialEq)]
+ +pub struct MultisigConfig {
+ + pub signers: Vec,
+ + pub required_signatures: u32,
+ + pub current_signatures: Vec,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct MultisigConfiguredEvent {
+ + pub job_id: u64,
+ + pub required_signatures: u32,
+ + pub total_signers: u32,
+ + pub configured_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct MultisigSignedEvent {
+ + pub job_id: u64,
+ + pub signer: Address,
+ + pub signature_count: u32,
+ + pub signed_at: u64,
+ +}
+ +
+ +#[contracttype]
+ +#[derive(Clone)]
+ +pub struct DisputeExpiredEvent {
+ + pub job_id: u64,
+ + pub refunded_to: Address,
+ + pub amount: i128,
+ + pub expired_at: u64,
+ +}
+ +
+ +
+ +struct ReentrancyGuard<'a> {
+ + env: &'a Env,
+ +}
+ +
+ +impl Drop for ReentrancyGuard<'_> {
+ + fn drop(&mut self) {
+ + self.env.storage().instance().remove(&DataKey::Locked);
+ + }
+ +}
+ +
+ +fn enter_reentrancy_guard(env: &Env) -> ReentrancyGuard<'_> {
+ + if env.storage().instance().has(&DataKey::Locked) {
+ + panic_with_error!(env, EscrowError::ReentrancyDetected);
+ + }
+ + env.storage().instance().set(&DataKey::Locked, &());
+ + ReentrancyGuard { env }
+ +}
+ +
+ +fn checked_i128_add(lhs: i128, rhs: i128) -> Result {
+ + lhs.checked_add(rhs).ok_or(EscrowError::InvalidInput)
+ +}
+ +
+++=======
+++>>>>>>> upstream/main
+ #[contract]
+ pub struct EscrowContract;
+
+ #[contractimpl]
+ impl EscrowContract {
+- const INSTANCE_TTL_THRESHOLD: u32 = 50_000;
+- const INSTANCE_TTL_EXTEND_TO: u32 = 150_000;
+- const PERSISTENT_TTL_THRESHOLD: u32 = 50_000;
+- const PERSISTENT_TTL_EXTEND_TO: u32 = 150_000;
+- const MAX_JOB_BUDGET: i128 = 10_000_000_000;
+- const MAX_MILESTONE_AMOUNT: i128 = 10_000_000_000;
+- const MAX_MILESTONES_PER_JOB: u32 = 32;
+- const DISPUTE_RESOLUTION_WINDOW: u64 = 7 * 24 * 60 * 60;
+-
+- fn bump_instance_ttl(env: &Env) {
++ pub fn initialize(env: Env, admin: Address, agent_judge: Address) {
++ if env.storage().instance().has(&DataKey::Admin) {
++ panic!("already initialized");
++ }
++ env.storage().instance().set(&DataKey::Admin, &admin);
+ env.storage()
+ .instance()
+- .extend_ttl(Self::INSTANCE_TTL_THRESHOLD, Self::INSTANCE_TTL_EXTEND_TO);
++ .set(&DataKey::AgentJudge, &agent_judge);
+ }
+
+++<<<<<<< HEAD
+ + fn bump_job_ttl(env: &Env, key: &DataKey) {
+ + if env.storage().persistent().has(key) {
+ + env.storage().persistent().extend_ttl(
+ + key,
+ + Self::PERSISTENT_TTL_THRESHOLD,
+ + Self::PERSISTENT_TTL_EXTEND_TO,
+ + );
+ + }
+ + }
+ +
+ + fn enter_job_lock(env: &Env, job_id: u64) -> Result {
+ + let lock_key = DataKey::JobLock(job_id);
+ + if env.storage().temporary().has(&lock_key) {
+ + return Err(EscrowError::ReentrantCall);
+ + }
+ + env.storage().temporary().set(&lock_key, &true);
+ + Ok(lock_key)
+ + }
+ +
+ + fn exit_job_lock(env: &Env, lock_key: DataKey) {
+ + env.storage().temporary().remove(&lock_key);
+ + }
+ +
+ + fn payout_with_fee(env: &Env, _job_id: u64, job: &EscrowJob, amount: i128) -> Result<(), EscrowError> {
+ + let token_client = token::Client::new(env, &job.token);
+ + let mut freelancer_amount = amount;
+ +
+ + if let Some(treasury_config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
+ + let fee = amount
+ + .checked_mul(treasury_config.fee_bps as i128)
+ + .ok_or(EscrowError::ArithmeticError)?
+ + .checked_div(10000)
+ + .ok_or(EscrowError::ArithmeticError)?;
+ +
+ + if fee > 0 {
+ + freelancer_amount = amount
+ + .checked_sub(fee)
+ + .ok_or(EscrowError::ArithmeticError)?;
+ +
+ + token_client.transfer(
+ + &env.current_contract_address(),
+ + &treasury_config.routing_address,
+ + &fee,
+ + );
+ + }
+ + }
+ +
+ + if freelancer_amount > 0 {
+ + token_client.transfer(
+ + &env.current_contract_address(),
+ + &job.freelancer,
+ + &freelancer_amount,
+ + );
+ + }
+ +
+ + Ok(())
+ + }
+ +
+ + fn assert_not_same_ledger_as_funding(_env: &Env, _job: &EscrowJob) -> Result<(), EscrowError> {
+ + Ok(())
+ + }
+ + fn sync_dispute_to_job_registry(env: &Env, job_id: u64) -> Result<(), EscrowError> {
+ + Self::bump_instance_ttl(env);
+ + let Some(registry_contract) = env
+ + .storage()
+ + .instance()
+ + .get::<_, Address>(&DataKey::JobRegistry)
+ + else {
+ + return Ok(());
+ + };
+ +
+ + let client = JobRegistryClient::new(env, ®istry_contract);
+ + client
+ + .try_mark_disputed(&job_id)
+ + .map_err(|_| EscrowError::JobRegistrySyncFailed)?
+ + .map_err(|_| EscrowError::JobRegistrySyncFailed)?;
+ +
+ + env.events().publish(
+ + ("escrow", "RegistryDisputeSynced"),
+ + RegistryDisputeSyncedEvent {
+ + job_id,
+ + registry_contract,
+ + synced_at: env.ledger().timestamp(),
+ + },
+ + );
+ +
+ + Ok(())
+ + }
+ +
+ + pub fn version(_env: Env) -> u32 {
+ + 1
+ + }
+ +
+ + pub fn initialize(env: Env, admin: Address, agent_judge: Address) -> Result<(), EscrowError> {
+ + // Prevent double initialization
+ + if env.storage().instance().has(&DataKey::Config) {
+ + return Err(EscrowError::AlreadyInitialized);
+ + }
+ +
+ + admin.require_auth();
+ +
+ + // Basic validation: admin and agent_judge must be distinct
+ + if admin == agent_judge {
+ + return Err(EscrowError::InvalidInput);
+ + }
+ +
+ +
+ + env.storage().instance().set(
+ + &DataKey::Config,
+ + &ContractConfig {
+ + admin: admin.clone(),
+ + agent_judge: agent_judge.clone(),
+ + },
+ + );
+ +
+ + // Emit an initialization event for off-chain consumers and logging
+ + log!(
+ + &env,
+ + "Escrow initialized with admin: {} and agent_judge: {}",
+ + admin,
+ + agent_judge
+ + );
+ + env.events().publish(
+ + ("escrow", "Initialized"),
+ + (admin.clone(), agent_judge.clone(), env.ledger().timestamp()),
+ + );
+ +
+ + Self::bump_instance_ttl(&env);
+ +
+ + Ok(())
+ + }
+++=======
+++>>>>>>> upstream/main
+ /// Admin can update the Agent Judge address.
+- /// Admin can update the Agent Judge address.
+- pub fn set_agent_judge(env: Env, new_agent_judge: Address) -> Result<(), EscrowError> {
+- let mut config: ContractConfig = env
+- .storage()
+- .instance()
+- .get(&DataKey::Config)
+- .ok_or(EscrowError::NotInitialized)?;
+- config.admin.require_auth();
+-
+- if config.admin == new_agent_judge {
+- return Err(EscrowError::InvalidInput);
+- }
+-
+- let admin = config.admin.clone();
+- config.agent_judge = new_agent_judge.clone();
+- env.storage().instance().set(&DataKey::Config, &config);
+-
+- // Emit an event for off-chain logging and debugging
+- log!(&env, "Agent Judge updated to: {}", new_agent_judge);
+- env.events().publish(
+- ("escrow", "AgentJudgeUpdated"),
+- (
+- admin.clone(),
+- new_agent_judge.clone(),
+- env.ledger().timestamp(),
+- ),
+- );
+-
+- Self::bump_instance_ttl(&env);
+-
+- Ok(())
+- }
+-
+- /// Admin configures the JobRegistry contract address used for cross-contract sync.
+- pub fn set_job_registry(env: Env, job_registry: Address) -> Result<(), EscrowError> {
+- let config: ContractConfig = env
++ pub fn set_agent_judge(env: Env, new_agent_judge: Address) {
++ let admin: Address = env
+ .storage()
+ .instance()
+- .get(&DataKey::Config)
+- .ok_or(EscrowError::NotInitialized)?;
+- let admin = config.admin;
+- admin.require_auth();
+-
+- env.storage()
+- .instance()
+- .set(&DataKey::JobRegistry, &job_registry);
+-
+- log!(&env, "JobRegistry configured to: {}", job_registry);
+- env.events().publish(
+- ("escrow", "JobRegistryConfigured"),
+- JobRegistryConfiguredEvent {
+- configured_by: admin,
+- registry_contract: job_registry,
+- configured_at: env.ledger().timestamp(),
+- },
+- );
+-
+- Self::bump_instance_ttl(&env);
+-
+- Ok(())
+- }
+-
+- pub fn get_job_registry(env: Env) -> Option {
+- env.storage().instance().get(&DataKey::JobRegistry)
+- }
+-
+- /// One-time initialization of the upgrade admin.
+- pub fn init_upgrade_admin(env: Env, admin: Address) -> Result<(), EscrowError> {
+- if env.storage().instance().has(&DataKey::UpgradeAdmin) {
+- return Err(EscrowError::UpgradeAdminAlreadySet);
+- }
++ .get(&DataKey::Admin)
++ .expect("not initialized");
+ admin.require_auth();
+- env.storage().instance().set(&DataKey::UpgradeAdmin, &admin);
+-
+- env.events().publish(
+- ("escrow", "UpgradeAdminSet"),
+- UpgradeAdminSetEvent {
+- old_admin: None,
+- new_admin: admin,
+- updated_at: env.ledger().timestamp(),
+- },
+- );
+- Ok(())
+- }
+-
+- /// Rotate the upgrade admin.
+- pub fn set_upgrade_admin(
+- env: Env,
+- caller: Address,
+- new_admin: Address,
+- ) -> Result<(), EscrowError> {
+- caller.require_auth();
+- let current_admin: Address = env
+- .storage()
+- .instance()
+- .get(&DataKey::UpgradeAdmin)
+- .ok_or(EscrowError::UpgradeAdminNotSet)?;
+-
+- if caller != current_admin {
+- return Err(EscrowError::Unauthorized);
+- }
+-
+- env.storage()
+- .instance()
+- .set(&DataKey::UpgradeAdmin, &new_admin);
+-
+- env.events().publish(
+- ("escrow", "UpgradeAdminSet"),
+- UpgradeAdminSetEvent {
+- old_admin: Some(current_admin),
+- new_admin,
+- updated_at: env.ledger().timestamp(),
+- },
+- );
+- Ok(())
+- }
+-
+- /// Returns the current upgrade admin address.
+- pub fn get_upgrade_admin(env: Env) -> Result {
+ env.storage()
+ .instance()
+- .get(&DataKey::UpgradeAdmin)
+- .ok_or(EscrowError::UpgradeAdminNotSet)
+- }
+-
+- /// Upgrades the current contract WASM. Only callable by upgrade admin.
+- pub fn upgrade(
+- env: Env,
+- caller: Address,
+- new_wasm_hash: BytesN<32>,
+- ) -> Result<(), EscrowError> {
+- Self::bump_instance_ttl(&env);
+- caller.require_auth();
+-
+- let upgrade_admin: Address = env
+- .storage()
+- .instance()
+- .get(&DataKey::UpgradeAdmin)
+- .ok_or(EscrowError::UpgradeAdminNotSet)?;
+-
+- if caller != upgrade_admin {
+- return Err(EscrowError::UpgradeUnauthorized);
+- }
+-
+- env.deployer()
+- .update_current_contract_wasm(new_wasm_hash.clone());
+- log!(&env, "Contract upgraded by admin");
+- env.events().publish(
+- ("escrow", "ContractUpgraded"),
+- ContractUpgradedEvent {
+- by_admin: caller,
+- new_wasm_hash,
+- upgraded_at: env.ledger().timestamp(),
+- },
+- );
+-
+- Ok(())
++ .set(&DataKey::AgentJudge, &new_agent_judge);
+ }
+
+ /// Client creates a job entry in Setup phase.
+@@@ -651,22 -100,24 +463,36 @@@
+ client.require_auth();
+ let key = DataKey::Job(job_id);
+ if env.storage().persistent().has(&key) {
+- return Err(EscrowError::InvalidInput);
++ panic!("job already exists");
+ }
+ let now: u64 = env.ledger().timestamp();
+++<<<<<<< HEAD
+ + let expires_duration = 30u64
+ + .checked_mul(24)
+ + .and_then(|h| h.checked_mul(60))
+ + .and_then(|m| m.checked_mul(60))
+ + .ok_or(EscrowError::ArithmeticError)?;
+ +
+ +let expires_at = now
+ + .checked_add(expires_duration)
+ + .ok_or(EscrowError::ArithmeticError)?;
+++=======
++ let expires_at = now
++ .checked_add(
++ 30u64
++ .checked_mul(24)
++ .expect("overflow")
++ .checked_mul(60)
++ .expect("overflow")
++ .checked_mul(60)
++ .expect("overflow"),
++ )
++ .expect("overflow");
+++>>>>>>> upstream/main
+
+ let job = EscrowJob {
+- client: client.clone(),
+- freelancer: freelancer.clone(),
++ client,
++ freelancer,
+ token: token_addr,
+ total_amount: 0,
+ released_amount: 0,
+@@@ -824,128 -213,34 +588,113 @@@
+ }
+ }
+
+++<<<<<<< HEAD
+ + let idx = match found_idx {
+ + Some(i) => i,
+ + None => return Err(EscrowError::NoPendingMilestones),
+ + };
+ +
+ + let mut milestone = job.milestones.get(idx).unwrap();
+ + let lock_key = Self::enter_job_lock(&env, job_id)?;
+ +
+ + milestone.status = MilestoneStatus::Released;
+ + job.milestones.set(idx, milestone.clone());
+ +
+ + job.released_amount = checked_i128_add(job.released_amount, milestone.amount)?;
+ +
+ + let next_status = if job.released_amount == job.total_amount {
+ + EscrowStatus::Completed
+ + } else {
+ + EscrowStatus::WorkInProgress
+ + };
+ + job.status.validate_transition(&next_status)?;
+ + job.status = next_status;
+ +
+ + let _guard = enter_reentrancy_guard(&env);
+ + env.storage().persistent().set(&key, &job);
+ +
+ + Self::payout_with_fee(&env, job_id, &job, milestone.amount)?;
+ +
+ + log!(
+ + &env,
+ + "release_milestone: job {} amount {}",
+ + job_id,
+ + milestone.amount
+ + );
+ + env.storage().persistent().set(&key, &job);
+ + Self::bump_job_ttl(&env, &key);
+ + Self::exit_job_lock(&env, lock_key);
+ +
+ + Self::exit_reentrancy_guard(&env);
+ +
+ + // Emit event
+ + env.events().publish(
+ + ("escrow", "ReleaseMilestone"),
+ + (job_id, idx, milestone.amount, env.ledger().timestamp()),
+ + );
+ +
+ + Ok(())
+++=======
++ let idx = found_idx.expect("no pending");
++ Self::set_guard(&env, job_id);
++ Self::release_milestone_internal(&env, job_id, &mut job, idx);
++ Self::clear_guard(&env, job_id);
+++>>>>>>> upstream/main
+ }
+
+ /// Happy-path release for an explicit milestone index (0-based).
+- /// Only the client may call this to release the funds for a specific milestone.
+- pub fn release_funds(
+- env: Env,
+- job_id: u64,
+- caller: Address,
+- milestone_index: u32,
+- ) -> Result<(), EscrowError> {
++ pub fn release_funds(env: Env, job_id: u64, caller: Address, milestone_index: u32) {
+ caller.require_auth();
++ Self::check_reentrancy(&env, job_id);
+
+ let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env
+- .storage()
+- .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
+-
+- Self::assert_not_same_ledger_as_funding(&env, &job)?;
+-
+- if !(job.status == EscrowStatus::Funded
+- || job.status == EscrowStatus::WorkInProgress)
+- {
+- return Err(EscrowError::InvalidState);
+- }
+-
+- if caller != job.client {
+- return Err(EscrowError::Unauthorized);
+- }
+-
+- if milestone_index >= job.milestones.len() {
+- return Err(EscrowError::InvalidInput);
+- }
++ let mut job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
+
+- let mut milestone = job
+- .milestones
+- .get(milestone_index)
+- .expect("invalid milestone");
+ assert!(
+- milestone.status == MilestoneStatus::Pending,
+- "milestone already released"
++ job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress,
++ "invalid state"
+ );
+- let lock_key = Self::enter_job_lock(&env, job_id).expect("reentrant job operation");
++ assert!(caller == job.client, "unauthorized");
++ assert!(milestone_index < job.milestone_count, "invalid");
+
+- milestone.status = MilestoneStatus::Released;
+- job.milestones.set(milestone_index, milestone.clone());
++ let m_key = DataKey::Milestone(job_id, milestone_index);
++ let milestone: Milestone = env.storage().persistent().get(&m_key).expect("invalid");
++ assert!(milestone.status == MilestoneStatus::Pending, "released");
+
+++<<<<<<< HEAD
+ + job.released_amount = checked_i128_add(job.released_amount, milestone.amount)?;
+ + assert!(
+ + job.released_amount <= job.total_amount,
+ + "double-spend: released exceeds total"
+ + );
+ + let next_status = if job.released_amount == job.total_amount {
+ + EscrowStatus::Completed
+ + } else {
+ + EscrowStatus::WorkInProgress
+ + };
+ + job.status.validate_transition(&next_status)?;
+ + job.status = next_status;
+ +
+ + let _guard = enter_reentrancy_guard(&env);
+ + env.storage().persistent().set(&key, &job);
+ +
+ + Self::payout_with_fee(&env, job_id, &job, milestone.amount)?;
+ +
+ + log!(
+ + &env,
+ + "release_funds: job {} amount {}",
+ + job_id,
+ + milestone.amount
+ + );
+ + env.storage().persistent().set(&key, &job);
+ + Self::bump_job_ttl(&env, &key);
+ + Self::exit_job_lock(&env, lock_key);
+ + Ok(())
+++=======
++ Self::set_guard(&env, job_id);
++ Self::release_milestone_internal(&env, job_id, &mut job, milestone_index);
++ Self::clear_guard(&env, job_id);
+++>>>>>>> upstream/main
+ }
+
+ /// Either party opens a dispute, locking remaining funds.
+@@@ -1072,81 -336,30 +790,76 @@@
+ /// Agent Judge resolves dispute -- splits funds by explicit amounts.
+ /// `payee_amount`: Amount to pay to the freelancer (payee).
+ /// `payer_amount`: Amount to return to the client (payer).
+- pub fn resolve_dispute(
+- env: Env,
+- job_id: u64,
+- payee_amount: i128,
+- payer_amount: i128,
+- ) -> Result<(), EscrowError> {
+- Self::bump_instance_ttl(&env);
+- let config: ContractConfig = env
++ pub fn resolve_dispute(env: Env, job_id: u64, payee_amount: i128, payer_amount: i128) {
++ let agent_judge: Address = env
+ .storage()
+ .instance()
+- .get(&DataKey::Config)
+- .expect("not initialized");
+- config.agent_judge.require_auth();
++ .get(&DataKey::AgentJudge)
++ .expect("agent judge not set");
++ agent_judge.require_auth();
+
+- if payee_amount < 0 || payer_amount < 0 {
+- return Err(EscrowError::InvalidInput);
+- }
++ assert!(payee_amount >= 0, "payee_amount must be >= 0");
++ assert!(payer_amount >= 0, "payer_amount must be >= 0");
+
+ let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env
+- .storage()
+- .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
+- if job.status != EscrowStatus::Disputed {
+- return Err(EscrowError::InvalidState);
+- }
++ let mut job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
++ assert!(job.status == EscrowStatus::Disputed, "job not disputed");
+
+++<<<<<<< HEAD
+ + if job.dispute_deadline > 0 && env.ledger().timestamp() > job.dispute_deadline {
+ + panic_with_error!(&env, EscrowError::DisputeResolutionExpired);
+ + }
+ +
+ + let remaining = job.total_amount.checked_sub(job.released_amount)
+ + .expect("invalid escrow balance state");
+ + let total_payout = checked_i128_add(payee_amount, payer_amount)
+ + .expect("invalid dispute payout state");
+ + assert!(total_payout <= remaining, "payout exceeds remaining funds");
+ + let lock_key = Self::enter_job_lock(&env, job_id).expect("reentrant job operation");
+ +
+ + let next_status = EscrowStatus::Resolved;
+ + job.status
+ + .validate_transition(&next_status)
+ + .expect("invalid state transition");
+ + job.released_amount = checked_i128_add(job.released_amount, total_payout)
+ + .expect("released amount overflow");
+ + job.status = next_status;
+ +
+ + let _guard = enter_reentrancy_guard(&env);
+ + env.storage().persistent().set(&key, &job);
+++=======
++ let remaining = job
++ .total_amount
++ .checked_sub(job.released_amount)
++ .expect("overflow");
++ let total_payout = payee_amount.checked_add(payer_amount).expect("overflow");
++ assert!(total_payout <= remaining, "payout exceeds remaining funds");
+++>>>>>>> upstream/main
+
+ let token_client = token::Client::new(&env, &job.token);
+ - if payee_amount > 0 {
+ + let mut freelancer_amount = payee_amount;
+ +
+ + if let Some(treasury_config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
+ + let fee = payee_amount
+ + .checked_mul(treasury_config.fee_bps as i128)
+ + .ok_or(EscrowError::ArithmeticError)?
+ + .checked_div(10000)
+ + .ok_or(EscrowError::ArithmeticError)?;
+ +
+ + if fee > 0 {
+ + freelancer_amount = payee_amount
+ + .checked_sub(fee)
+ + .ok_or(EscrowError::ArithmeticError)?;
+ +
+ + token_client.transfer(
+ + &env.current_contract_address(),
+ + &treasury_config.routing_address,
+ + &fee,
+ + );
+ + }
+ + }
+ +
+ + if freelancer_amount > 0 {
+ token_client.transfer(
+ &env.current_contract_address(),
+ &job.freelancer,
+@@@ -1157,90 -370,26 +870,66 @@@
+ token_client.transfer(&env.current_contract_address(), &job.client, &payer_amount);
+ }
+
+- log!(
+- &env,
+- "resolve_dispute: job {} payee {} payer {}",
+- job_id,
+- payee_amount,
+- payer_amount
+- );
++ job.released_amount = job
++ .released_amount
++ .checked_add(total_payout)
++ .expect("overflow");
++ job.status = EscrowStatus::Resolved;
+ env.storage().persistent().set(&key, &job);
+++<<<<<<< HEAD
+ + Self::bump_job_ttl(&env, &key);
+ + Self::exit_job_lock(&env, lock_key);
+ + Ok(())
+++=======
+++>>>>>>> upstream/main
+ }
+
+- /// Client recoups funds if freelancer never responded or deadline has passed.
+- pub fn refund(env: Env, job_id: u64, client: Address) -> Result<(), EscrowError> {
++ /// Client recoups funds if freelancer never responded.
++ pub fn refund(env: Env, job_id: u64, client: Address) {
+ client.require_auth();
+
+ let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env
+- .storage()
+- .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
++ let mut job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
+
+++<<<<<<< HEAD
+ + Self::assert_not_same_ledger_as_funding(&env, &job)?;
+ +
+ + if !(job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress) {
+ + return Err(EscrowError::InvalidState);
+ + }
+ +
+ + if client != job.client {
+ + return Err(EscrowError::Unauthorized);
+ + }
+ +
+ + let remaining = job.total_amount - job.released_amount;
+ + let lock_key = Self::enter_job_lock(&env, job_id)?;
+ + let _guard = enter_reentrancy_guard(&env);
+ + if remaining > 0 {
+ + let token_client = token::Client::new(&env, &job.token);
+ + token_client.transfer(&env.current_contract_address(), &job.client, &remaining);
+ + }
+ +
+ + let next_status = EscrowStatus::Refunded;
+ + job.status = next_status;
+ +
+ + log!(&env, "refund: job {} amount {}", job_id, remaining);
+ + env.storage().persistent().set(&key, &job);
+ + Self::bump_job_ttl(&env, &key);
+ + Self::exit_job_lock(&env, lock_key);
+ +
+ + Self::exit_reentrancy_guard(&env);
+ +
+ + env.events().publish(
+ + ("escrow", "Refunded"),
+ + (job_id, client, remaining, env.ledger().timestamp()),
+++=======
++ assert!(
++ job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress,
++ "job not in active state"
+++>>>>>>> upstream/main
+ );
+-
+- Ok(())
+- }
+-
+- /// Client cancels a brief and triggers graceful refund behavior.
+- /// Supports Setup (no funds moved yet), Funded, and WorkInProgress states.
+- pub fn cancel_brief(env: Env, job_id: u64, client: Address) -> Result<(), EscrowError> {
+- client.require_auth();
+-
+- let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env
+- .storage()
+- .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
+-
+- if client != job.client {
+- return Err(EscrowError::Unauthorized);
+- }
+-
+- if !(job.status == EscrowStatus::Setup
+- || job.status == EscrowStatus::Funded
+- || job.status == EscrowStatus::WorkInProgress)
+- {
+- return Err(EscrowError::InvalidState);
+- }
++ assert!(client == job.client, "only client can refund");
+
+ let remaining = job
+ .total_amount
+@@@ -1330,99 -416,18 +956,33 @@@
+ let job: EscrowJob = env
+ .storage()
+ .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
++ .get(&DataKey::Job(job_id))
++ .expect("job not found");
+ job.total_amount
+ .checked_sub(job.released_amount)
+- .ok_or(EscrowError::ArithmeticOverflow)
+- }
+-
+- /// Returns escrow's core live parameters for a job: total, released, and funding ledger sequence.
+- pub fn get_active_escrow_params(
+- env: Env,
+- job_id: u64,
+- ) -> Result<(i128, i128, u32), EscrowError> {
+- let key = DataKey::Job(job_id);
+- let job: EscrowJob = env
+- .storage()
+- .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
+- Ok((job.total_amount, job.released_amount, job.funded_ledger_seq))
+- }
+-
+- /// Returns the dispute resolution deadline (unix timestamp). 0 = no active dispute.
+- pub fn get_dispute_deadline(env: Env, job_id: u64) -> u64 {
+- let key = DataKey::Job(job_id);
+- let job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
+- Self::bump_job_ttl(&env, &key);
+- job.dispute_deadline
++ .expect("overflow")
+ }
+
+- /// Force-expire an unresolved dispute after the deadline; refunds client.
+- pub fn expire_dispute(env: Env, job_id: u64) -> Result<(), EscrowError> {
+- Self::bump_instance_ttl(&env);
+- let config: ContractConfig = env
+- .storage()
+- .instance()
+- .get(&DataKey::Config)
+- .ok_or(EscrowError::NotInitialized)?;
+- config.agent_judge.require_auth();
+-
+- let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env
+- .storage()
+- .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
+-
+- if job.status != EscrowStatus::Disputed {
+- return Err(EscrowError::InvalidState);
+- }
+-
+- let now = env.ledger().timestamp();
+- if job.dispute_deadline == 0 || now <= job.dispute_deadline {
+- return Err(EscrowError::InvalidState);
+- }
+-
+- let remaining = job.total_amount - job.released_amount;
+- let next_status = EscrowStatus::Refunded;
+- job.status.validate_transition(&next_status)?;
+- job.released_amount = job.total_amount;
+- job.status = next_status;
+-
+- let _guard = enter_reentrancy_guard(&env);
+- env.storage().persistent().set(&key, &job);
+-
+- if remaining > 0 {
+- let token_client = token::Client::new(&env, &job.token);
+- token_client.transfer(&env.current_contract_address(), &job.client, &remaining);
+- }
+-
+- log!(
+- &env,
+- "expire_dispute: job {} refunded {}",
+- job_id,
+- remaining
+- );
+- env.storage().persistent().set(&key, &job);
+- Self::bump_job_ttl(&env, &key);
+-
+++<<<<<<< HEAD
+ +Self::exit_reentrancy_guard(&env);
+ + env.events().publish(
+ + ("escrow", "DisputeExpired"),
+ + DisputeExpiredEvent {
+ + job_id,
+ + refunded_to: job.client,
+ + amount: remaining,
+ + expired_at: now,
+ + },
+ + );
+ +
+ + Ok(())
+++=======
++ pub fn get_milestone(env: Env, job_id: u64, index: u32) -> Milestone {
++ env.storage()
++ .persistent()
++ .get(&DataKey::Milestone(job_id, index))
++ .expect("milestone not found")
+++>>>>>>> upstream/main
+ }
+
+ /// Retrieve the status of all milestones for a given job.
+@@@ -1434,451 -435,71 +990,449 @@@
+ let job: EscrowJob = env
+ .storage()
+ .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
++ .get(&DataKey::Job(job_id))
++ .expect("job not found");
+ let mut statuses = Vec::new(&env);
+- for m in job.milestones.iter() {
++ for i in 0..job.milestone_count {
++ let m_key = DataKey::Milestone(job_id, i);
++ let m: Milestone = env
++ .storage()
++ .persistent()
++ .get(&m_key)
++ .expect("milestone not found");
+ statuses.push_back(m.status);
+ }
+- Ok(statuses)
++ statuses
+ }
++ }
+
+ -impl EscrowContract {
+ - fn check_reentrancy(env: &Env, job_id: u64) {
+ - if env.storage().instance().has(&DataKey::GuardFlag(job_id)) {
+ - panic!("reentrant");
+ - }
+++<<<<<<< HEAD
+ + /// Retrieve the multisig configuration for a given job.
+ + pub fn get_multisig_config(env: Env, job_id: u64) -> Result {
+ + let config_key = DataKey::MultisigConfig(job_id);
+ + let config: MultisigConfig = env
+ + .storage()
+ + .persistent()
+ + .get(&config_key)
+ + .ok_or(EscrowError::InvalidInput)?;
+ + Self::bump_job_ttl(&env, &config_key);
+ + Ok(config)
+ }
+
+ - fn set_guard(env: &Env, job_id: u64) {
+ - env.storage()
+ + /// Read-only helper exposing active escrow configuration.
+ + pub fn get_escrow_config(env: Env) -> Result<(Address, Address, Option), EscrowError> {
+ + let config: ContractConfig = env
+ + .storage()
+ .instance()
+ - .set(&DataKey::GuardFlag(job_id), &true);
+ + .get(&DataKey::Config)
+ + .ok_or(EscrowError::NotInitialized)?;
+ + let job_registry: Option = env.storage().instance().get(&DataKey::JobRegistry);
+ + Self::bump_instance_ttl(&env);
+ + Ok((config.admin, config.agent_judge, job_registry))
+ }
+
+ - fn clear_guard(env: &Env, job_id: u64) {
+ - env.storage().instance().remove(&DataKey::GuardFlag(job_id));
+ - }
+ -
+ - fn release_milestone_internal(
+ - env: &Env,
+ - job_id: u64,
+ - job: &mut EscrowJob,
+ - milestone_index: u32,
+ - ) {
+ - let m_key = DataKey::Milestone(job_id, milestone_index);
+ - let mut milestone: Milestone = env.storage().persistent().get(&m_key).expect("invalid");
+
+ - milestone.status = MilestoneStatus::Released;
+ - env.storage().persistent().set(&m_key, &milestone);
+
+ - job.released_amount = job
+ - .released_amount
+ - .checked_add(milestone.amount)
+ - .expect("overflow");
+ - job.status = EscrowStatus::WorkInProgress;
+ + /// Configure multisig for a job. Only callable by client during Setup phase.
+ + pub fn configure_multisig(
+ + env: Env,
+ + job_id: u64,
+ + signers: Vec,
+ + required_signatures: u32,
+ + ) -> Result<(), EscrowError> {
+ + let key = DataKey::Job(job_id);
+ + let mut job: EscrowJob = env
+ + .storage()
+ + .persistent()
+ + .get(&key)
+ + .ok_or(EscrowError::JobNotFound)?;
+ + Self::bump_job_ttl(&env, &key);
+
+ - let token_client = token::Client::new(&env, &job.token);
+ - token_client.transfer(
+ - &env.current_contract_address(),
+ - &job.freelancer,
+ - &milestone.amount,
+ - );
+ + job.client.require_auth();
+
+ - if job.released_amount == job.total_amount {
+ - job.status = EscrowStatus::Completed;
+ + if job.status != EscrowStatus::Setup {
+ + return Err(EscrowError::InvalidState);
+++=======
+++impl EscrowContract {
+++ fn check_reentrancy(env: &Env, job_id: u64) {
+++ if env.storage().instance().has(&DataKey::GuardFlag(job_id)) {
+++ panic!("reentrant");
+++>>>>>>> upstream/main
+ }
+-
+- if signers.is_empty() || required_signatures == 0 {
+- return Err(EscrowError::InvalidInput);
+- }
+-
+- if required_signatures > signers.len() {
+- return Err(EscrowError::InvalidInput);
+- }
+-
+- let config = MultisigConfig {
+- signers: signers.clone(),
+- required_signatures,
+- current_signatures: Vec::new(&env),
+- };
+-
+- env.storage()
+- .persistent()
+- .set(&DataKey::MultisigConfig(job_id), &config);
+-
+- job.requires_multisig = true;
+- env.storage().persistent().set(&key, &job);
+- Self::bump_job_ttl(&env, &key);
+-
+- env.events().publish(
+- ("escrow", "MultisigConfigured"),
+- MultisigConfiguredEvent {
+- job_id,
+- required_signatures,
+- total_signers: signers.len(),
+- configured_at: env.ledger().timestamp(),
+- },
+- );
+--
+- Ok(())
+ - env.storage().persistent().set(&DataKey::Job(job_id), job);
+ }
+ -}
+ +
+++<<<<<<< HEAD
+ + /// Sign a multisig job. Callable by any configured signer.
+ + pub fn sign_multisig(env: Env, job_id: u64, signer: Address) -> Result<(), EscrowError> {
+ + signer.require_auth();
+ +
+ + let key = DataKey::Job(job_id);
+ + let job: EscrowJob = env
+ + .storage()
+ + .persistent()
+ + .get(&key)
+ + .ok_or(EscrowError::JobNotFound)?;
+ + Self::bump_job_ttl(&env, &key);
+ +
+ + if !job.requires_multisig {
+ + return Err(EscrowError::InvalidInput);
+ + }
+ +
+ + let config_key = DataKey::MultisigConfig(job_id);
+ + let mut config: MultisigConfig = env
+ + .storage()
+ + .persistent()
+ + .get(&config_key)
+ + .ok_or(EscrowError::InvalidInput)?;
+ +
+ + // Check if signer is authorized
+ + let mut is_signer = false;
+ + for s in config.signers.iter() {
+ + if s == signer {
+ + is_signer = true;
+ + break;
+ + }
+ + }
+ + if !is_signer {
+ + return Err(EscrowError::Unauthorized);
+ + }
+ +
+ + // Check if already signed
+ + for s in config.current_signatures.iter() {
+ + if s == signer {
+ + return Err(EscrowError::AlreadySigned);
+ + }
+ + }
+ +
+ + config.current_signatures.push_back(signer.clone());
+ + env.storage().persistent().set(&config_key, &config);
+ + Self::bump_job_ttl(&env, &config_key);
+ +
+ + env.events().publish(
+ + ("escrow", "MultisigSigned"),
+ + MultisigSignedEvent {
+ + job_id,
+ + signer,
+ + signature_count: config.current_signatures.len(),
+ + signed_at: env.ledger().timestamp(),
+ + },
+ + );
+ +
+ + Ok(())
+ + }
+ +
+ + /// Check if a multisig job has enough signatures
+ + pub fn check_multisig_ready(env: Env, job_id: u64) -> Result {
+ + let key = DataKey::Job(job_id);
+ + let job: EscrowJob = env
+ + .storage()
+ + .persistent()
+ + .get(&key)
+ + .ok_or(EscrowError::JobNotFound)?;
+ +
+ + if !job.requires_multisig {
+ + return Ok(true);
+ + }
+ +
+ + let config_key = DataKey::MultisigConfig(job_id);
+ + let config: MultisigConfig = env
+ + .storage()
+ + .persistent()
+ + .get(&config_key)
+ + .ok_or(EscrowError::InvalidInput)?;
+ +
+ + Ok(config.current_signatures.len() >= config.required_signatures)
+ + }
+ +
+ + // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+ + // SC-ESC-001: Admin fee splitting
+ + // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+ +
+ + /// Admin configures the platform treasury and fee (in basis points).
+ + /// Once set, milestone releases route `fee_bps` of each payout to the
+ + /// treasury and the remainder to the freelancer.
+ + pub fn set_fee_config(env: Env, treasury: Address, fee_bps: u32) -> Result<(), EscrowError> {
+ + let config: ContractConfig = env
+ + .storage()
+ + .instance()
+ + .get(&DataKey::Config)
+ + .ok_or(EscrowError::NotInitialized)?;
+ + config.admin.require_auth();
+ +
+ + if fee_bps > MAX_FEE_BPS {
+ + return Err(EscrowError::FeeTooHigh);
+ + }
+ +
+ + let t_config = TreasuryConfig {
+ + routing_address: treasury.clone(),
+ + fee_bps,
+ + };
+ + env.storage().instance().set(&DataKey::Treasury, &t_config);
+ + Self::bump_instance_ttl(&env);
+ +
+ + env.events().publish(
+ + ("escrow", "FeeConfigUpdated"),
+ + FeeConfigUpdatedEvent {
+ + treasury,
+ + fee_bps,
+ + updated_at: env.ledger().timestamp(),
+ + },
+ + );
+ +
+ + Ok(())
+ + }
+ +
+ + /// Returns the active platform fee in basis points (0 when unset).
+ + pub fn get_fee_bps(env: Env) -> u32 {
+ + Self::bump_instance_ttl(&env);
+ + if let Some(config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
+ + config.fee_bps
+ + } else {
+ + 0
+ + }
+ + }
+ +
+ + /// Returns the configured treasury address, if any.
+ + pub fn get_treasury(env: Env) -> Option {
+ + Self::bump_instance_ttl(&env);
+ + if let Some(config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
+ + Some(config.routing_address)
+ + } else {
+ + None
+ + }
+++=======
+++ fn set_guard(env: &Env, job_id: u64) {
+++ env.storage()
+++ .instance()
+++ .set(&DataKey::GuardFlag(job_id), &true);
+ + }
+ +
+- fn exit_reentrancy_guard(env: &Env) {
+- env.storage().instance().remove(&DataKey::Locked);
+++ fn clear_guard(env: &Env, job_id: u64) {
+++ env.storage().instance().remove(&DataKey::GuardFlag(job_id));
+++>>>>>>> upstream/main
+ + }
+ +
+- // ─────────────────────────────────────────────────────────────────────
+- // SC-ESC-002: Dynamic lockup durations
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+-
+- /// Client sets a custom lockup duration (in seconds) during Setup. The
+- /// job's expiry becomes `created_at + lockup_seconds`. Until expiry the
+- /// client cannot refund (see `refund`).
+- pub fn set_lockup_duration(
+- env: Env,
+++ fn release_milestone_internal(
+++ env: &Env,
+ + job_id: u64,
+- lockup_seconds: u64,
+- ) -> Result<(), EscrowError> {
+- let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env
+- .storage()
+- .persistent()
+- .get(&key)
+- .ok_or(EscrowError::JobNotFound)?;
+- Self::bump_job_ttl(&env, &key);
+++ job: &mut EscrowJob,
+++ milestone_index: u32,
+++ ) {
+++ let m_key = DataKey::Milestone(job_id, milestone_index);
+++ let mut milestone: Milestone = env.storage().persistent().get(&m_key).expect("invalid");
+ +
+- job.client.require_auth();
+++ milestone.status = MilestoneStatus::Released;
+++ env.storage().persistent().set(&m_key, &milestone);
+ +
+++<<<<<<< HEAD
+ + if job.status != EscrowStatus::Setup {
+ + return Err(EscrowError::InvalidState);
+ + }
+ + if lockup_seconds == 0 {
+ + return Err(EscrowError::InvalidInput);
+ + }
+ +
+ + let expires_at = job
+ + .created_at
+ + .checked_add(lockup_seconds)
+ + .ok_or(EscrowError::InvalidInput)?;
+ + job.expires_at = expires_at;
+ +
+ + env.storage().persistent().set(&key, &job);
+ + Self::bump_job_ttl(&env, &key);
+ +
+ + env.events().publish(
+ + ("escrow", "LockupUpdated"),
+ + LockupUpdatedEvent {
+ + job_id,
+ + expires_at,
+ + updated_at: env.ledger().timestamp(),
+ + },
+ + );
+ +
+ + Ok(())
+ + }
+ +
+ + /// Returns the lockup expiry timestamp for a job.
+ + pub fn get_expiry(env: Env, job_id: u64) -> Result {
+ + let key = DataKey::Job(job_id);
+ + let job: EscrowJob = env
+ + .storage()
+ + .persistent()
+ + .get(&key)
+ + .ok_or(EscrowError::JobNotFound)?;
+ + Ok(job.expires_at)
+ + }
+ +
+ + // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+ + // SC-ESC-003: Emergency escrow sweep (admin-gated)
+ + // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+ +
+ + /// Emergency sweep of the entire locked balance for a job to a rescue
+ + /// address. Only the admin may invoke this. It overrides the active state
+ + /// machine and bypasses standard release rules for catastrophic recovery.
+ + pub fn emergency_sweep(
+ + env: Env,
+ + job_id: u64,
+ + rescue_address: Address,
+ + ) -> Result<(), EscrowError> {
+ + let config: ContractConfig = env
+ + .storage()
+ + .instance()
+ + .get(&DataKey::Config)
+ + .ok_or(EscrowError::NotInitialized)?;
+ + config.admin.require_auth();
+ +
+ + let key = DataKey::Job(job_id);
+ + let mut job: EscrowJob = env
+ + .storage()
+ + .persistent()
+ + .get(&key)
+ + .ok_or(EscrowError::JobNotFound)?;
+ + Self::bump_job_ttl(&env, &key);
+ +
+ + let remaining = job
+ + .total_amount
+ + .checked_sub(job.released_amount)
+ + .ok_or(EscrowError::InvalidState)?;
+ + if remaining <= 0 {
+ + return Err(EscrowError::NothingToSweep);
+ + }
+ +
+ + let _guard = enter_reentrancy_guard(&env);
+ +
+ + // Override the state machine: mark fully released and refunded.
+ + job.released_amount = job.total_amount;
+ + job.status = EscrowStatus::Refunded;
+ +
+ + let token_client = token::Client::new(&env, &job.token);
+ + token_client.transfer(&env.current_contract_address(), &rescue_address, &remaining);
+ +
+ + env.storage().persistent().set(&key, &job);
+ + Self::bump_job_ttl(&env, &key);
+ +
+ + Self::exit_reentrancy_guard(&env);
+ +
+ + env.events().publish(
+ + ("escrow", "EmergencySweep"),
+ + EmergencySweepEvent {
+ + job_id,
+ + admin: config.admin,
+ + rescue_address,
+ + amount: remaining,
+ + swept_at: env.ledger().timestamp(),
+ + },
+ + );
+ +
+ + Ok(())
+ + }
+ +
+ + // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+ + // SC-ESC-004: Milestone re-allocation / amendment
+ + // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+ +
+ + /// Mutually amend the remaining (unreleased) milestone structure. Both the
+ + /// client and the freelancer must authorize. The sum of the new
+ + /// allocations must equal the remaining balance. Amendments are rejected
+ + /// once the job is disputed.
+ + pub fn amend_milestones(
+ + env: Env,
+ + job_id: u64,
+ + new_amounts: Vec,
+ + ) -> Result<(), EscrowError> {
+ + let key = DataKey::Job(job_id);
+ + let mut job: EscrowJob = env
+ + .storage()
+ + .persistent()
+ + .get(&key)
+ + .ok_or(EscrowError::JobNotFound)?;
+ + Self::bump_job_ttl(&env, &key);
+ +
+ + // Both parties must cryptographically authorize the restructuring.
+ + job.client.require_auth();
+ + job.freelancer.require_auth();
+ +
+ + // Locked once disputed (or otherwise inactive).
+ + if !(job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress) {
+ + return Err(EscrowError::InvalidState);
+ + }
+ +
+ + if new_amounts.is_empty() {
+ + return Err(EscrowError::InvalidInput);
+ + }
+ +
+ + let mut new_sum: i128 = 0;
+ + for amount in new_amounts.iter() {
+ + if amount <= 0 {
+ + return Err(EscrowError::InvalidInput);
+ + }
+ + new_sum = new_sum
+ + .checked_add(amount)
+ + .ok_or(EscrowError::InvalidInput)?;
+ + }
+ +
+ + let remaining = job
+ + .total_amount
+ + .checked_sub(job.released_amount)
+ + .ok_or(EscrowError::InvalidState)?;
+ + if new_sum != remaining {
+ + return Err(EscrowError::AmountMismatch);
+ + }
+ +
+ + // Preserve already-released milestones; replace the pending set.
+ + let mut rebuilt: Vec = Vec::new(&env);
+ + for milestone in job.milestones.iter() {
+ + if milestone.status == MilestoneStatus::Released {
+ + rebuilt.push_back(milestone);
+ + }
+ + }
+ + for amount in new_amounts.iter() {
+ + rebuilt.push_back(Milestone {
+ + amount,
+ + status: MilestoneStatus::Pending,
+ + });
+ + }
+ + job.milestones = rebuilt;
+ +
+ + env.storage().persistent().set(&key, &job);
+ + Self::bump_job_ttl(&env, &key);
+ +
+ + env.events().publish(
+ + ("escrow", "MilestonesAmended"),
+ + MilestonesAmendedEvent {
+ + job_id,
+ + milestone_count: new_amounts.len(),
+ + remaining_amount: remaining,
+ + amended_at: env.ledger().timestamp(),
+ + },
+ + );
+ +
+ + Ok(())
+ + }
+ +
+ +
+++=======
+++ job.released_amount = job
+++ .released_amount
+++ .checked_add(milestone.amount)
+++ .expect("overflow");
+++ job.status = EscrowStatus::WorkInProgress;
+++
+++ let token_client = token::Client::new(&env, &job.token);
+++ token_client.transfer(
+++ &env.current_contract_address(),
+++ &job.freelancer,
+++ &milestone.amount,
+++ );
+++
+++ if job.released_amount == job.total_amount {
+++ job.status = EscrowStatus::Completed;
+++ }
+++
+++ env.storage().persistent().set(&DataKey::Job(job_id), job);
+++ }
+++>>>>>>> upstream/main
+ +}
+
+ #[cfg(test)]
+ mod test {
+@@@ -2410,223 -881,32 +1814,139 @@@
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ cc.add_milestone(&1u64, &5000i128);
+-
+- let tc = token::Client::new(&env, &token_addr);
+- let client_balance_before = tc.balance(&client);
+-
+- cc.deposit(&1u64, &5000i128);
+-
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Funded);
+- assert_eq!(job.total_amount, 5000);
+- assert_eq!(tc.balance(&contract_id), 5000);
+- assert_eq!(tc.balance(&client), client_balance_before - 5000);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #6)")]
+- fn test_deposit_invalid_state_not_setup() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &6000i128);
+-
+- // Try to deposit again when job is already Funded
+- cc.deposit(&1u64, &6000i128);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #4)")]
+- fn test_deposit_negative_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &1000i128);
+-
+- cc.deposit(&1u64, &-1000i128);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #4)")]
+- fn test_deposit_zero_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &1000i128);
+-
+- cc.deposit(&1u64, &0i128);
+- }
+-
+- #[test]
+- fn test_release_milestone_sequential_success() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &2000i128);
+- cc.add_milestone(&1u64, &3000i128);
+ cc.add_milestone(&1u64, &5000i128);
+++<<<<<<< HEAD
+ + cc.deposit(&1u64, &10000i128);
+ +
+ + let tc = token::Client::new(&env, &token_addr);
+ +
+ + // Release first milestone
+ + cc.release_milestone(&1u64, &client);
+ + let job = cc.get_job(&1u64);
+ + assert_eq!(job.status, EscrowStatus::WorkInProgress);
+ + assert_eq!(job.released_amount, 2000);
+ + assert_eq!(tc.balance(&freelancer), 2000);
+ +
+ + // Release second milestone
+ + cc.release_milestone(&1u64, &client);
+ + let job = cc.get_job(&1u64);
+ + assert_eq!(job.released_amount, 5000);
+ + assert_eq!(tc.balance(&freelancer), 5000);
+ +
+ + // Release third milestone - should complete the job
+ + cc.release_milestone(&1u64, &client);
+ + let job = cc.get_job(&1u64);
+ + assert_eq!(job.status, EscrowStatus::Completed);
+ + assert_eq!(job.released_amount, 10000);
+ + assert_eq!(tc.balance(&freelancer), 10000);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #6)")]
+ + fn test_release_milestone_no_pending_milestones() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &5000i128);
+ + cc.deposit(&1u64, &5000i128);
+ +
+ + // Release the only milestone
+ + cc.release_milestone(&1u64, &client);
+ +
+ + // Try to release again - should fail
+ + cc.release_milestone(&1u64, &client);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #3)")]
+ + fn test_release_milestone_unauthorized_freelancer() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &5000i128);
+ + cc.deposit(&1u64, &5000i128);
+ +
+ + // Freelancer cannot release milestones
+ + cc.release_milestone(&1u64, &freelancer);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #23)")]
+ + fn test_refund_reentrant_lock_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &10_000i128);
+++=======
+++>>>>>>> upstream/main
+ cc.deposit(&1u64, &10_000i128);
+
+- lock_job_for_test(&env, &contract_id, 1);
+- cc.refund(&1u64, &client);
++ env.as_contract(&contract_id, || {
++ EscrowContract::set_guard(&env, 1u64);
++ assert!(env.storage().instance().has(&DataKey::GuardFlag(1u64)));
++ EscrowContract::clear_guard(&env, 1u64);
++ assert!(!env.storage().instance().has(&DataKey::GuardFlag(1u64)));
++ });
++
++ cc.release_milestone(&1u64, &client);
++ env.as_contract(&contract_id, || {
++ assert!(!env.storage().instance().has(&DataKey::GuardFlag(1u64)));
++ });
++
++ cc.release_milestone(&1u64, &client);
++ env.as_contract(&contract_id, || {
++ assert!(!env.storage().instance().has(&DataKey::GuardFlag(1u64)));
++ });
++
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Completed);
+ }
+
+ #[test]
+++<<<<<<< HEAD
+ + fn test_release_funds_out_of_order() {
+++=======
++ fn test_reentrancy_protection_release_funds_blocked() {
+++>>>>>>> upstream/main
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@@ -2683,326 -966,25 +2006,276 @@@
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &2000i128);
+ cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &3000i128);
+-
+- cc.release_funds(&1u64, &client, &5u32);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #6)")]
+- fn test_release_funds_twice_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ cc.add_milestone(&1u64, &5000i128);
+++<<<<<<< HEAD
+ + cc.deposit(&1u64, &5000i128);
+ +
+ + cc.release_funds(&1u64, &client, &0u32);
+ + cc.release_funds(&1u64, &client, &0u32);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #3)")]
+ + fn test_unauthorized_release_funds_by_freelancer_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &5000i128);
+ + cc.deposit(&1u64, &5000i128);
+ +
+ + cc.release_funds(&1u64, &freelancer, &0u32);
+ + }
+ +
+ + #[test]
+ + fn test_deposit_event_emitted() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &8000i128);
+ + cc.deposit(&1u64, &8000i128);
+ +
+ + // Verify deposit was successful
+ + let job = cc.get_job(&1u64);
+ + assert_eq!(job.status, EscrowStatus::Funded);
+ + assert_eq!(job.total_amount, 8000);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #6)")]
+ + fn test_release_milestone_overflow_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &5000i128);
+ + cc.deposit(&1u64, &5000i128);
+ +
+ + // Release once
+ + cc.release_milestone(&1u64, &client);
+ +
+ + // Try to release again - no pending milestones, will fail with InvalidState
+ + cc.release_milestone(&1u64, &client);
+ + }
+ +
+ + // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+ + // Comprehensive Escrow Dispute & Resolution Tests (>90% coverage)
+ + // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+ +
+ + #[test]
+ + fn test_raise_dispute_by_freelancer_locks_funds() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &4000i128);
+ + cc.add_milestone(&1u64, &6000i128);
+ + cc.deposit(&1u64, &10000i128);
+ +
+ + cc.raise_dispute(&1u64, &freelancer);
+ +
+ + let job = cc.get_job(&1u64);
+ + assert_eq!(job.status, EscrowStatus::Disputed);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #3)")]
+ + fn test_raise_dispute_by_third_party_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ + let rando = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &5000i128);
+ + cc.deposit(&1u64, &5000i128);
+ +
+ + cc.raise_dispute(&1u64, &rando);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #6)")]
+ + fn test_raise_dispute_on_completed_job_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &10000i128);
+ + cc.deposit(&1u64, &10000i128);
+ + cc.release_milestone(&1u64, &client);
+ +
+ + // Job is now Completed, cannot dispute
+ + cc.raise_dispute(&1u64, &client);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #3)")]
+ + fn test_open_dispute_by_rando_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ + let rando = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &5000i128);
+ + cc.deposit(&1u64, &5000i128);
+ +
+ + cc.open_dispute(&1u64, &rando);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #6)")]
+ + fn test_open_dispute_on_completed_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &5000i128);
+ + cc.deposit(&1u64, &5000i128);
+ + cc.release_milestone(&1u64, &client);
+ +
+ + cc.open_dispute(&1u64, &client);
+ + }
+ +
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #23)")]
+ + fn test_release_milestone_reentrant_lock_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+ +
+ + let admin = Address::generate(&env);
+ + let agent_judge = Address::generate(&env);
+ + let client = Address::generate(&env);
+ + let freelancer = Address::generate(&env);
+ +
+ + let token_addr = setup_token(&env, &admin);
+ + mint(&env, &token_addr, &client);
+ +
+ + let contract_id = env.register_contract(None, EscrowContract);
+ + let cc = EscrowContractClient::new(&env, &contract_id);
+ +
+ + cc.initialize(&admin, &agent_judge);
+ + cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ + cc.add_milestone(&1u64, &10_000i128);
+++=======
+++>>>>>>> upstream/main
+ cc.deposit(&1u64, &10_000i128);
+
+- lock_job_for_test(&env, &contract_id, 1);
+- cc.release_milestone(&1u64, &client);
+- }
+-
+- #[test]
+- fn test_resolve_dispute_success() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &4000i128);
+- cc.deposit(&1u64, &10000i128);
++ assert_eq!(cc.get_escrow_balance(&1u64), 10_000);
+
+- // Release one milestone first
+ cc.release_milestone(&1u64, &client);
+- let tc = token::Client::new(&env, &token_addr);
+- assert_eq!(tc.balance(&freelancer), 3000);
+-
+- // Raise dispute
+- cc.raise_dispute(&1u64, &client);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
++ assert_eq!(cc.get_escrow_balance(&1u64), 8000);
+
+- // Resolve with 70/30 split of remaining 7000
+- cc.resolve_dispute(&1u64, &4900i128, &2100i128);
++ cc.release_milestone(&1u64, &client);
++ assert_eq!(cc.get_escrow_balance(&1u64), 5000);
+
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Resolved);
+- assert_eq!(tc.balance(&freelancer), 7900); // 3000 + 4900
+- assert_eq!(tc.balance(&client), 92100); // 100000 - 10000 + 2100
++ cc.release_milestone(&1u64, &client);
++ assert_eq!(cc.get_escrow_balance(&1u64), 0);
+ }
+
+ #[test]
+- fn test_resolve_dispute_full_refund_to_client() {
+++<<<<<<< HEAD
+++ fn test_resolve_dispute_success() {
+++=======
++ fn test_multiple_jobs_isolated() {
+++>>>>>>> upstream/main
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@@ -3018,613 -1003,49 +2294,57 @@@
+ let cc = EscrowContractClient::new(&env, &contract_id);
+
+ cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &8000i128);
+- cc.deposit(&1u64, &8000i128);
+-
+- cc.raise_dispute(&1u64, &client);
+-
+- // Full refund to client
+- cc.resolve_dispute(&1u64, &0i128, &8000i128);
+-
+- let tc = token::Client::new(&env, &token_addr);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Resolved);
+- assert_eq!(tc.balance(&client), 100000); // Full refund
+- assert_eq!(tc.balance(&freelancer), 0);
+- }
+-
+- #[test]
+- fn test_resolve_dispute_full_payout_to_freelancer() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.create_job(&1u64, &client_one, &freelancer_one, &token_addr);
++ cc.add_milestone(&1u64, &4000i128);
+ cc.add_milestone(&1u64, &6000i128);
+- cc.deposit(&1u64, &6000i128);
+-
+- cc.raise_dispute(&1u64, &freelancer);
+-
+- // Full payout to freelancer
+- cc.resolve_dispute(&1u64, &6000i128, &0i128);
+-
+- let tc = token::Client::new(&env, &token_addr);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Resolved);
+- assert_eq!(tc.balance(&freelancer), 6000);
+- }
+-
+- #[test]
+- #[should_panic]
+- fn test_release_funds_reentrant_lock_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &10_000i128);
+ cc.deposit(&1u64, &10_000i128);
+
+- lock_job_for_test(&env, &contract_id, 1);
+- cc.release_funds(&1u64, &client, &0u32);
+- }
++ cc.create_job(&2u64, &client_two, &freelancer_two, &token_addr);
++ cc.add_milestone(&2u64, &1500i128);
++ cc.add_milestone(&2u64, &2500i128);
++ cc.deposit(&2u64, &4000i128);
+
+++<<<<<<< HEAD
+ + #[test]
+ + #[should_panic(expected = "Error(Contract, #6)")]
+ + fn test_resolve_dispute_invalid_state_panics() {
+ + let env = Env::default();
+ + env.mock_all_auths();
+++=======
++ cc.release_milestone(&1u64, &client_one);
+++>>>>>>> upstream/main
+
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- // Try to resolve without raising dispute first
+- cc.resolve_dispute(&1u64, &2500i128, &2500i128);
+- }
+-
+- #[test]
+- fn test_raise_dispute_blocks_release_funds() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
++ assert_eq!(cc.get_escrow_balance(&1u64), 6000);
++ assert_eq!(cc.get_escrow_balance(&2u64), 4000);
++ assert_eq!(
++ cc.get_milestone(&1u64, &0u32).status,
++ MilestoneStatus::Released
++ );
++ assert_eq!(
++ cc.get_milestone(&1u64, &1u32).status,
++ MilestoneStatus::Pending
++ );
++ assert_eq!(
++ cc.get_milestone(&2u64, &0u32).status,
++ MilestoneStatus::Pending
++ );
+
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
++ cc.release_funds(&2u64, &client_two, &1u32);
+
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &9000i128);
++ assert_eq!(cc.get_escrow_balance(&1u64), 6000);
++ assert_eq!(cc.get_escrow_balance(&2u64), 1500);
++ assert_eq!(
++ cc.get_milestone(&2u64, &0u32).status,
++ MilestoneStatus::Pending
++ );
++ assert_eq!(
++ cc.get_milestone(&2u64, &1u32).status,
++ MilestoneStatus::Released
++ );
+
+- // Release first milestone
+- cc.release_milestone(&1u64, &client);
+ let tc = token::Client::new(&env, &token_addr);
+- assert_eq!(tc.balance(&freelancer), 3000);
+-
+- // Raise dispute
+- cc.raise_dispute(&1u64, &freelancer);
+-
+- // Verify job is in Disputed state
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #3)")]
+- fn test_refund_by_non_client_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- // Freelancer cannot refund
+- cc.refund(&1u64, &freelancer);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #5)")]
+- fn test_get_job_not_found_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.get_job(&999u64);
+- }
+-
+- #[test]
+- fn test_cancel_brief_in_setup_marks_refunded_without_transfer() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+- let token_addr = setup_token(&env, &admin);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&77u64, &client, &freelancer, &token_addr);
+- cc.cancel_brief(&77u64, &client);
+-
+- let job = cc.get_job(&77u64);
+- assert_eq!(job.status, EscrowStatus::Refunded);
+- assert_eq!(job.released_amount, 0);
+- }
+-
+- #[test]
+- fn test_dispute_event_emission() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- // Raise dispute and verify state
+- cc.raise_dispute(&1u64, &client);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
+- assert_eq!(job.total_amount, 5000);
+- assert_eq!(job.released_amount, 0);
+- }
+-
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+- // SC-ESC-005: Token Decimals Compatibility
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+-
+- #[test]
+- fn test_token_decimals_stored_on_deposit() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- // Stellar asset contract has 7 decimals; verify captured during deposit
+- assert_eq!(cc.get_token_decimals(&1u64), 7);
+- }
+-
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+- // SC-ESC-007: Instance Storage Optimisation
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+-
+- #[test]
+- fn test_instance_config_getters() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- assert_eq!(cc.get_admin(), admin);
+- assert_eq!(cc.get_agent_judge(), agent_judge);
+- }
+-
+- #[test]
+- fn test_set_agent_judge_updates_packed_config() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let new_judge = Address::generate(&env);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.set_agent_judge(&new_judge);
+-
+- assert_eq!(cc.get_agent_judge(), new_judge);
+- assert_eq!(cc.get_admin(), admin);
+- }
+-
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+- // SC-ESC-008: Double-Spending Prevention
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #6)")]
+- fn test_double_release_milestone_is_blocked() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- cc.release_milestone(&1u64, &client);
+- // Job is now Completed; status guard fires first -> InvalidState (#6)
+- cc.release_milestone(&1u64, &client);
+- }
+-
+- #[test]
+- fn test_released_amount_matches_transferred_on_sequential_release() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &4000i128);
+- cc.deposit(&1u64, &10000i128);
+-
+- let tc = token::Client::new(&env, &token_addr);
+-
+- cc.release_milestone(&1u64, &client);
+- assert_eq!(cc.get_job(&1u64).released_amount, tc.balance(&freelancer));
+-
+- cc.release_milestone(&1u64, &client);
+- assert_eq!(cc.get_job(&1u64).released_amount, tc.balance(&freelancer));
+-
+- cc.release_milestone(&1u64, &client);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.released_amount, job.total_amount);
+- assert_eq!(job.released_amount, tc.balance(&freelancer));
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #12)")]
+- fn test_reentrant_release_milestone_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- env.as_contract(&contract_id, || {
+- env.storage().instance().set(&DataKey::Locked, &());
+- });
+- cc.release_milestone(&1u64, &client);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #12)")]
+- fn test_reentrant_release_funds_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- env.as_contract(&contract_id, || {
+- env.storage().instance().set(&DataKey::Locked, &());
+- });
+- cc.release_funds(&1u64, &client, &0u32);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #12)")]
+- fn test_reentrant_refund_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- env.as_contract(&contract_id, || {
+- env.storage().instance().set(&DataKey::Locked, &());
+- });
+- cc.refund(&1u64, &client);
+- }
+-
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+- // SC-ESC-009: Dispute Timeout Enforcement
+- // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+-
+- #[test]
+- fn test_dispute_deadline_set_on_raise() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- let ts_before = env.ledger().timestamp();
+- cc.raise_dispute(&1u64, &client);
+-
+- assert_eq!(cc.get_dispute_deadline(&1u64), ts_before + 7 * 24 * 60 * 60);
+- }
+-
+- #[test]
+- fn test_resolve_before_deadline_succeeds() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &6000i128);
+- cc.deposit(&1u64, &6000i128);
+-
+- cc.raise_dispute(&1u64, &client);
+-
+- env.ledger()
+- .set_timestamp(env.ledger().timestamp() + 3 * 24 * 60 * 60);
+-
+- cc.resolve_dispute(&1u64, &6000i128, &0i128);
+- assert_eq!(cc.get_job(&1u64).status, EscrowStatus::Resolved);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #20)")]
+- fn test_resolve_after_deadline_fails() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- cc.raise_dispute(&1u64, &client);
+- env.ledger()
+- .set_timestamp(env.ledger().timestamp() + 8 * 24 * 60 * 60);
+-
+- cc.resolve_dispute(&1u64, &5000i128, &0i128); // DisputeResolutionExpired (#18)
+- }
+-
+- #[test]
+- fn test_expire_dispute_refunds_client_after_deadline() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &8000i128);
+- cc.deposit(&1u64, &8000i128);
+-
+- let tc = token::Client::new(&env, &token_addr);
+- assert_eq!(tc.balance(&client), 92000);
+-
+- cc.raise_dispute(&1u64, &client);
+- env.ledger()
+- .set_timestamp(env.ledger().timestamp() + 8 * 24 * 60 * 60);
+-
+- cc.expire_dispute(&1u64);
+- assert_eq!(cc.get_job(&1u64).status, EscrowStatus::Refunded);
+- assert_eq!(tc.balance(&client), 100000);
+- }
+-
+- #[test]
+- fn test_version() {
+- let env = Env::default();
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+- assert_eq!(cc.version(), 1);
+- }
+-
+- #[test]
+- fn test_get_multisig_config() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+- let signer1 = Address::generate(&env);
+- let signer2 = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+-
+- let signers = soroban_sdk::vec![&env, signer1.clone(), signer2.clone()];
+- cc.configure_multisig(&1u64, &signers, &2u32);
+-
+- let config = cc.get_multisig_config(&1u64);
+- assert_eq!(config.required_signatures, 2);
+- assert_eq!(config.signers.len(), 2);
++ assert_eq!(tc.balance(&freelancer_one), 4000);
++ assert_eq!(tc.balance(&freelancer_two), 2500);
+ }
+ }
diff --git a/contracts/escrow/my_changes.patch b/contracts/escrow/my_changes.patch
new file mode 100644
index 00000000..247686fb
--- /dev/null
+++ b/contracts/escrow/my_changes.patch
@@ -0,0 +1,145737 @@
+diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml
+index 182d0d9..c3773a8 100644
+--- a/.github/workflows/CI.yml
++++ b/.github/workflows/CI.yml
+@@ -9,12 +9,12 @@ on:
+ env:
+ # Real Cloud Run Backend URL for the Frontend
+ NEXT_PUBLIC_API_URL: https://lance-api-641037923100.us-central1.run.app
+-
++
+ # Securely injected via GitHub Actions Secrets
+ DATABASE_URL: ${{ secrets.DATABASE_URL }}
+ JUDGE_AUTHORITY_SECRET: ${{ secrets.JUDGE_AUTHORITY_SECRET }}
+ OPENCLAW_API_KEY: ${{ secrets.OPENCLAW_API_KEY }}
+-
++
+ # Contract IDs (Public information, safe to commit)
+ ESCROW_CONTRACT_ID: CD5E6AXK2J5C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6
+ REPUTATION_CONTRACT_ID: CD5E6AXK2J5C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6C6A6
+@@ -40,6 +40,33 @@ jobs:
+ - name: Build
+ run: npm run build --prefix backend
+
++ contracts:
++ name: Smart Contracts
++ runs-on: ubuntu-latest
++ steps:
++ - uses: actions/checkout@v4
++ - name: Install Rust toolchain
++ uses: dtolnay/rust-toolchain@v1
++ with:
++ toolchain: 1.88.0
++ targets: wasm32-unknown-unknown
++ - name: Rust Cache
++ uses: Swatinem/rust-cache@v2
++ - name: Test Escrow
++ run: cargo test -p escrow
++ - name: Build Contracts
++ run: cargo build --target wasm32-unknown-unknown --release -p escrow -p reputation -p job_registry
++ - name: Verify Escrow WASM Size
++ run: |
++ wasm="target/wasm32-unknown-unknown/release/escrow.wasm"
++ size=$(stat -c%s "$wasm")
++ limit=$((80 * 1024))
++ echo "Escrow WASM size: ${size} bytes"
++ if [ "$size" -gt "$limit" ]; then
++ echo "Escrow WASM exceeds ${limit} bytes"
++ exit 1
++ fi
++
+ web-build:
+ name: Web Frontend
+ runs-on: ubuntu-latest
+diff --git a/Cargo.toml b/Cargo.toml
+index 23f1f77..8d87746 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -28,11 +28,24 @@ tower-http = { version = "0.5", features = ["cors", "trace"] }
+ futures = "0.3"
+
+ [profile.release]
+-opt-level = "z"
+-overflow-checks = true
+-debug = 0
+-strip = "symbols"
+-debug-assertions = false
+-panic = "abort"
+-codegen-units = 1
+-lto = true
++opt-level = "z"
++overflow-checks = true
++debug = 0
++strip = "symbols"
++debug-assertions = false
++panic = "abort"
++codegen-units = 1
++lto = true
++
++[profile.contract-release]
++inherits = "release"
++# Soroban deployment artifacts should prioritize small WASM output and deterministic
++# checked arithmetic over host-side debug metadata.
++opt-level = "z"
++overflow-checks = true
++debug = 0
++strip = "symbols"
++debug-assertions = false
++panic = "abort"
++codegen-units = 1
++lto = true
+diff --git a/apps/web/components/__tests__/activity-log.test.tsx b/apps/web/components/__tests__/activity-log.test.tsx
+index 36e05ab..eb76180 100644
+--- a/apps/web/components/__tests__/activity-log.test.tsx
++++ b/apps/web/components/__tests__/activity-log.test.tsx
+@@ -1,6 +1,6 @@
+ import React from "react";
+ import { render, screen } from "@testing-library/react";
+-import { vi } from "vitest";
++import { describe, it, expect, vi } from "vitest";
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+
+ const logs = [
+diff --git a/apps/web/components/jobs/bid-status-badge.test.tsx b/apps/web/components/jobs/bid-status-badge.test.tsx
+index 4703c59..94803eb 100644
+--- a/apps/web/components/jobs/bid-status-badge.test.tsx
++++ b/apps/web/components/jobs/bid-status-badge.test.tsx
+@@ -1,6 +1,6 @@
+ import { describe, it, expect } from "vitest";
+ import { render, screen } from "@testing-library/react";
+-import { BidStatusBadge, BidStatusIndicator } from "../bid-status-badge";
++import { BidStatusBadge, BidStatusIndicator } from "./bid-status-badge";
+
+ describe("BidStatusBadge Component", () => {
+ describe("Rendering", () => {
+diff --git a/apps/web/lib/api.ts b/apps/web/lib/api.ts
+index 68cfbc1..bf4443f 100644
+--- a/apps/web/lib/api.ts
++++ b/apps/web/lib/api.ts
+@@ -46,14 +46,15 @@ export const api = {
+ }),
+ },
+ jobs: {
+- list: (params?: { query?: string; tag?: string; sort?: string; status?: string }) => {
++ list: async (params?: { query?: string; tag?: string; sort?: string; status?: string }) => {
+ const qs = new URLSearchParams();
+ if (params?.query) qs.set("query", params.query);
+ if (params?.tag) qs.set("tag", params.tag);
+ if (params?.sort) qs.set("sort", params.sort);
+ if (params?.status) qs.set("status", params.status);
+ const path = `/v1/jobs${qs.toString() ? `?${qs.toString()}` : ""}`;
+- return request(path);
++ const response = await request(path);
++ return Array.isArray(response) ? response : response.items;
+ },
+ get: (id: string) => request(`/v1/jobs/${id}`),
+ create: (body: CreateJobBody) =>
+@@ -210,6 +211,15 @@ export interface Job {
+ updated_at: string;
+ }
+
++export interface JobsListResponse {
++ items: Job[];
++ next_cursor: {
++ created_at: string;
++ id: string;
++ } | null;
++ limit: number;
++}
++
+ export interface CreateJobBody {
+ title: string;
+ description: string;
+diff --git a/apps/web/lib/reputation.ts b/apps/web/lib/reputation.ts
+index 9f2e63a..5a348ae 100644
+--- a/apps/web/lib/reputation.ts
++++ b/apps/web/lib/reputation.ts
+@@ -28,6 +28,7 @@ export interface ReputationMetrics {
+ reviews: number;
+ starRating: number;
+ averageStars: number;
++ badgeLevel?: number;
+ }
+
+ export interface ReputationViewMetrics {
+@@ -42,6 +43,7 @@ interface ContractReputationScore {
+ total_jobs: number | string | bigint;
+ total_points: number | string | bigint;
+ reviews: number | string | bigint;
++ badge_level?: number | string | bigint;
+ }
+
+ interface ContractReputationView {
+@@ -66,6 +68,7 @@ function fallbackMetrics(): ReputationMetrics {
+ reviews: 0,
+ starRating: toStarRating(scoreBps),
+ averageStars: 2.5,
++ badgeLevel: 0,
+ };
+ }
+
+@@ -82,6 +85,7 @@ function metricsFromScore(score: ContractReputationScore): ReputationMetrics {
+ const totalPoints = normalizeNumber(score.total_points);
+ const reviews = normalizeNumber(score.reviews);
+ const averageStars = reviews > 0 ? totalPoints / reviews : toStarRating(scoreBps);
++ const badgeLevel = normalizeNumber(score.badge_level);
+
+ return {
+ scoreBps,
+@@ -90,6 +94,7 @@ function metricsFromScore(score: ContractReputationScore): ReputationMetrics {
+ reviews,
+ starRating: toStarRating(scoreBps),
+ averageStars,
++ badgeLevel,
+ };
+ }
+
+diff --git a/apps/web/package.json b/apps/web/package.json
+index 76307f4..d0fdf1b 100644
+--- a/apps/web/package.json
++++ b/apps/web/package.json
+@@ -36,21 +36,23 @@
+ "zod": "4.3.6",
+ "zustand": "^5.0.3"
+ },
+- "devDependencies": {
+- "@tailwindcss/postcss": "^4",
+- "@testing-library/jest-dom": "^6.6.3",
+- "@testing-library/react": "^16.3.0",
+- "@types/node": "^20.19.39",
+- "@types/react": "^19",
+- "@types/react-dom": "^19",
+- "@vitest/coverage-v8": "^4.1.5",
+- "eslint": "^9",
+- "eslint-config-next": "16.1.6",
+- "jsdom": "^26.1.0",
+- "tailwindcss": "^4.2.2",
+- "typescript": "^5",
+- "vitest": "^4.1.5"
+-},
++ "devDependencies": {
++ "@tailwindcss/postcss": "^4",
++ "@testing-library/dom": "^10.4.1",
++ "@testing-library/jest-dom": "^6.6.3",
++ "@testing-library/react": "^16.3.0",
++ "@testing-library/user-event": "^14.6.1",
++ "@types/node": "^20.19.39",
++ "@types/react": "^19",
++ "@types/react-dom": "^19",
++ "@vitest/coverage-v8": "^4.1.5",
++ "eslint": "^9",
++ "eslint-config-next": "16.1.6",
++ "jsdom": "^26.1.0",
++ "tailwindcss": "^4.2.2",
++ "typescript": "^5",
++ "vitest": "^4.1.5"
++ },
+ "optionalDependencies": {
+ "@next/swc-linux-x64-gnu": "16.1.6",
+ "@next/swc-linux-x64-musl": "16.1.6",
+diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json
+index 14cbb17..91095f3 100644
+--- a/apps/web/tsconfig.json
++++ b/apps/web/tsconfig.json
+@@ -21,7 +21,7 @@
+ "paths": {
+ "@/*": ["./*"]
+ },
+- "types": ["node", "react", "react-dom"]
++ "types": ["node", "react", "react-dom", "@testing-library/jest-dom"]
+ },
+ "include": [
+ "next-env.d.ts",
+diff --git a/backend/.env.example b/backend/.env.example
+index de84410..cd16209 100644
+--- a/backend/.env.example
++++ b/backend/.env.example
+@@ -10,6 +10,26 @@ ESCROW_CONTRACT_ID=TODO_after_deploy
+ REPUTATION_CONTRACT_ID=TODO_after_deploy
+ JOB_REGISTRY_CONTRACT_ID=TODO_after_deploy
+ PORT=3001
++
++# --- Connection Pool Configuration ---
++POOL_MAX_CONNECTIONS=20
++POOL_MIN_CONNECTIONS=2
++POOL_IDLE_TIMEOUT_MS=30000
++POOL_CONNECTION_TIMEOUT_MS=5000
++POOL_HEALTH_CHECK_INTERVAL_MS=30000
++POOL_CONNECT_RETRY_LIMIT=3
++POOL_CONNECT_RETRY_BASE_DELAY_MS=500
++
++# Per-IP token bucket on public intake POST routes (auth, job create, bids, uploads, bulk).
++# Effective RPM scales down automatically when the connection pool is busy.
++RATE_LIMIT_RPM=60
++RATE_LIMIT_BURST=10
++RATE_LIMIT_MIN_RPM=15
++
+ RUST_LOG=backend=debug,tower_http=debug
+ # Set to "json" for structured JSON log output (e.g. in production)
+ LOG_FORMAT=pretty
++# Comma-separated list of additional header names to redact from logs (case-insensitive).
++# Defaults already include: authorization, cookie, set-cookie, x-api-key, x-auth-token, x-secret, etc.
++SENSITIVE_HEADERS=
++
+diff --git a/backend/dist/config/db.js b/backend/dist/config/db.js
+index eff48ba..acd5e74 100644
+--- a/backend/dist/config/db.js
++++ b/backend/dist/config/db.js
+@@ -3,20 +3,217 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+-exports.prisma = void 0;
++exports.prisma = exports.pool = void 0;
++exports.getPoolHealthStats = getPoolHealthStats;
++exports.startPoolHealthCheck = startPoolHealthCheck;
++exports.stopPoolHealthCheck = stopPoolHealthCheck;
++exports.connectWithRetry = connectWithRetry;
+ const client_1 = require("@prisma/client");
+ const pg_1 = require("pg");
+ const adapter_pg_1 = require("@prisma/adapter-pg");
+ const dotenv_1 = __importDefault(require("dotenv"));
++const tracing_1 = require("./tracing");
+ dotenv_1.default.config();
+ const connectionString = process.env.DATABASE_URL;
+-const pool = new pg_1.Pool({ connectionString });
+-const adapter = new adapter_pg_1.PrismaPg(pool);
++// ---------------------------------------------------------------------------
++// Pool configuration — tuneable via environment variables
++// ---------------------------------------------------------------------------
++const POOL_MAX = parseInt(process.env.POOL_MAX_CONNECTIONS || "20", 10);
++const POOL_MIN = parseInt(process.env.POOL_MIN_CONNECTIONS || "2", 10);
++const POOL_IDLE_TIMEOUT_MS = parseInt(process.env.POOL_IDLE_TIMEOUT_MS || "30000", 10);
++const POOL_CONNECTION_TIMEOUT_MS = parseInt(process.env.POOL_CONNECTION_TIMEOUT_MS || "5000", 10);
++const POOL_HEALTH_CHECK_INTERVAL_MS = parseInt(process.env.POOL_HEALTH_CHECK_INTERVAL_MS || "30000", 10);
++const POOL_CONNECT_RETRY_LIMIT = parseInt(process.env.POOL_CONNECT_RETRY_LIMIT || "3", 10);
++const POOL_CONNECT_RETRY_BASE_DELAY_MS = parseInt(process.env.POOL_CONNECT_RETRY_BASE_DELAY_MS || "500", 10);
++// ---------------------------------------------------------------------------
++// Build the pool with resilient options
++// ---------------------------------------------------------------------------
++exports.pool = new pg_1.Pool({
++ connectionString,
++ max: POOL_MAX,
++ min: POOL_MIN,
++ idleTimeoutMillis: POOL_IDLE_TIMEOUT_MS,
++ connectionTimeoutMillis: POOL_CONNECTION_TIMEOUT_MS,
++ allowExitOnIdle: false, // Keep the pool alive even when the event loop has no other work
++});
++// ---------------------------------------------------------------------------
++// Pool event listeners — structured logging for diagnostics
++// ---------------------------------------------------------------------------
++exports.pool.on("connect", (client) => {
++ client
++ .query("SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED")
++ .catch((err) => {
++ console.error("[POOL] Failed to configure transaction isolation:", err.message);
++ });
++ if (process.env.NODE_ENV !== "production") {
++ console.log(`[POOL] New client connected | total=${exports.pool.totalCount} idle=${exports.pool.idleCount} waiting=${exports.pool.waitingCount}`);
++ }
++});
++exports.pool.on("acquire", () => {
++ if (process.env.NODE_ENV !== "production") {
++ console.log(`[POOL] Client acquired | total=${exports.pool.totalCount} idle=${exports.pool.idleCount} waiting=${exports.pool.waitingCount}`);
++ }
++});
++exports.pool.on("remove", () => {
++ if (process.env.NODE_ENV !== "production") {
++ console.log(`[POOL] Client removed | total=${exports.pool.totalCount} idle=${exports.pool.idleCount} waiting=${exports.pool.waitingCount}`);
++ }
++});
++exports.pool.on("error", (err) => {
++ console.error("[POOL] Unexpected pool error:", err.message);
++});
++let lastHealthCheckAt = null;
++let lastHealthCheckOk = true;
++let healthChecksPassed = 0;
++let healthChecksFailed = 0;
++const poolStartedAt = Date.now();
++function getPoolHealthStats() {
++ return {
++ totalConnections: exports.pool.totalCount,
++ idleConnections: exports.pool.idleCount,
++ activeConnections: exports.pool.totalCount - exports.pool.idleCount,
++ waitingRequests: exports.pool.waitingCount,
++ maxConnections: POOL_MAX,
++ minConnections: POOL_MIN,
++ idleTimeoutMs: POOL_IDLE_TIMEOUT_MS,
++ connectionTimeoutMs: POOL_CONNECTION_TIMEOUT_MS,
++ healthCheckIntervalMs: POOL_HEALTH_CHECK_INTERVAL_MS,
++ lastHealthCheckAt: lastHealthCheckAt ? lastHealthCheckAt.toISOString() : null,
++ lastHealthCheckOk,
++ uptimeSeconds: Math.floor((Date.now() - poolStartedAt) / 1000),
++ healthChecksPassed,
++ healthChecksFailed,
++ };
++}
++// ---------------------------------------------------------------------------
++// Background health-check — validates an idle connection periodically
++// ---------------------------------------------------------------------------
++let healthCheckTimer = null;
++async function runPoolHealthCheck() {
++ let client;
++ try {
++ client = await exports.pool.connect();
++ await client.query("SELECT 1");
++ lastHealthCheckOk = true;
++ healthChecksPassed++;
++ }
++ catch (err) {
++ lastHealthCheckOk = false;
++ healthChecksFailed++;
++ console.error("[POOL HEALTH] Background health-check failed:", err.message);
++ }
++ finally {
++ lastHealthCheckAt = new Date();
++ if (client) {
++ client.release();
++ }
++ }
++}
++function startPoolHealthCheck() {
++ if (healthCheckTimer)
++ return; // already running
++ // Run once immediately then on an interval
++ runPoolHealthCheck();
++ healthCheckTimer = setInterval(runPoolHealthCheck, POOL_HEALTH_CHECK_INTERVAL_MS);
++ // Allow the process to exit even if the timer is still active
++ if (healthCheckTimer && typeof healthCheckTimer === "object" && "unref" in healthCheckTimer) {
++ healthCheckTimer.unref();
++ }
++ console.log(`[POOL HEALTH] Background health-check started (interval: ${POOL_HEALTH_CHECK_INTERVAL_MS}ms)`);
++}
++function stopPoolHealthCheck() {
++ if (healthCheckTimer) {
++ clearInterval(healthCheckTimer);
++ healthCheckTimer = null;
++ }
++}
++// ---------------------------------------------------------------------------
++// connectWithRetry — Wraps initial connection with exponential backoff so the
++// API doesn't crash on cold-start if the database is momentarily unavailable.
++// ---------------------------------------------------------------------------
++async function connectWithRetry() {
++ for (let attempt = 1; attempt <= POOL_CONNECT_RETRY_LIMIT; attempt++) {
++ try {
++ const client = await exports.pool.connect();
++ await client.query("SELECT 1");
++ client.release();
++ console.log(`[POOL] Database connected successfully on attempt ${attempt}`);
++ return;
++ }
++ catch (err) {
++ const delay = Math.min(POOL_CONNECT_RETRY_BASE_DELAY_MS * Math.pow(2, attempt - 1) + Math.random() * 100, 5000);
++ console.error(`[POOL] Connection attempt ${attempt}/${POOL_CONNECT_RETRY_LIMIT} failed: ${err.message}. ` +
++ `Retrying in ${delay.toFixed(0)}ms...`);
++ if (attempt === POOL_CONNECT_RETRY_LIMIT) {
++ throw new Error(`Failed to connect to the database after ${POOL_CONNECT_RETRY_LIMIT} attempts: ${err.message}`);
++ }
++ await new Promise((resolve) => setTimeout(resolve, delay));
++ }
++ }
++}
++// ---------------------------------------------------------------------------
++// Prisma Client with the pg pool adapter
++// ---------------------------------------------------------------------------
++const adapter = new adapter_pg_1.PrismaPg(exports.pool);
+ const globalForPrisma = global;
++// Initialize Prisma with optimized middleware for tracing and performance monitoring
+ exports.prisma = globalForPrisma.prisma ||
+ new client_1.PrismaClient({
+ adapter,
+ log: process.env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"],
+ });
++// Add query middleware for tracing and performance monitoring
++exports.prisma.$use(async (params, next) => {
++ const spanContext = tracing_1.context.active();
++ const startTime = Date.now();
++ const logger = tracing_1.trace.getLogger("db-query");
++ try {
++ const result = await next(params);
++ const duration = Date.now() - startTime;
++ // Log slow queries (> 1000ms)
++ if (duration > 1000) {
++ logger.warn(`Slow query detected: ${params.model}.${params.action}`, {
++ duration,
++ model: params.model,
++ action: params.action,
++ args: JSON.stringify(params.args).substring(0, 200),
++ });
++ }
++ logger.debug(`Query completed: ${params.model}.${params.action}`, {
++ duration,
++ model: params.model,
++ action: params.action,
++ });
++ return result;
++ }
++ catch (error) {
++ const duration = Date.now() - startTime;
++ logger.error(`Query failed: ${params.model}.${params.action}`, {
++ duration,
++ model: params.model,
++ action: params.action,
++ error: error instanceof Error ? error.message : String(error),
++ });
++ throw error;
++ }
++});
+ if (process.env.NODE_ENV !== "production")
+ globalForPrisma.prisma = exports.prisma;
++// ---------------------------------------------------------------------------
++// Graceful shutdown — release pool connections on process exit signals
++// ---------------------------------------------------------------------------
++async function gracefulShutdown(signal) {
++ console.log(`[POOL] Received ${signal}. Draining connection pool...`);
++ stopPoolHealthCheck();
++ try {
++ await exports.prisma.$disconnect();
++ await exports.pool.end();
++ console.log("[POOL] Connection pool drained successfully.");
++ }
++ catch (err) {
++ console.error("[POOL] Error during pool shutdown:", err.message);
++ }
++ process.exit(0);
++}
++process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
++process.on("SIGINT", () => gracefulShutdown("SIGINT"));
+diff --git a/backend/dist/config/tracing.js b/backend/dist/config/tracing.js
+new file mode 100644
+index 0000000..c3439d0
+--- /dev/null
++++ b/backend/dist/config/tracing.js
+@@ -0,0 +1,71 @@
++"use strict";
++// Tracing and logging instrumentation for diagnostic visibility
++// Provides structured logging context for all backend operations
++Object.defineProperty(exports, "__esModule", { value: true });
++exports.context = exports.trace = void 0;
++class TraceLogger {
++ name;
++ constructor(name) {
++ this.name = name;
++ }
++ log(level, message, context) {
++ const entry = {
++ timestamp: new Date().toISOString(),
++ level,
++ message,
++ logger: this.name,
++ ...context,
++ };
++ if (process.env.LOG_FORMAT === "json") {
++ console.log(JSON.stringify(entry));
++ }
++ else {
++ const contextStr = context ? ` ${JSON.stringify(context)}` : "";
++ console.log(`[${entry.timestamp}] [${level}] [${this.name}] ${message}${contextStr}`);
++ }
++ }
++ debug(message, context) {
++ if (process.env.LOG_LEVEL === "debug" || process.env.NODE_ENV === "development") {
++ this.log("DEBUG", message, context);
++ }
++ }
++ info(message, context) {
++ this.log("INFO", message, context);
++ }
++ warn(message, context) {
++ this.log("WARN", message, context);
++ }
++ error(message, context) {
++ this.log("ERROR", message, context);
++ }
++}
++class TraceContext {
++ contextMap = new Map();
++ active() {
++ return Object.fromEntries(this.contextMap);
++ }
++ set(key, value) {
++ this.contextMap.set(key, value);
++ }
++ get(key) {
++ return this.contextMap.get(key);
++ }
++ clear() {
++ this.contextMap.clear();
++ }
++}
++class Trace {
++ loggers = new Map();
++ context = new TraceContext();
++ getLogger(name) {
++ if (!this.loggers.has(name)) {
++ this.loggers.set(name, new TraceLogger(name));
++ }
++ return this.loggers.get(name);
++ }
++ getContext() {
++ return this.context;
++ }
++}
++exports.trace = new Trace();
++exports.context = exports.trace.getContext();
+diff --git a/backend/dist/index.js b/backend/dist/index.js
+index 3356cb2..0de864e 100644
+--- a/backend/dist/index.js
++++ b/backend/dist/index.js
+@@ -7,6 +7,7 @@ const express_1 = __importDefault(require("express"));
+ const cors_1 = __importDefault(require("cors"));
+ const dotenv_1 = __importDefault(require("dotenv"));
+ const db_1 = require("./config/db");
++const tracing_1 = require("./utils/tracing");
+ const auth_1 = __importDefault(require("./routes/auth"));
+ const jobs_1 = __importDefault(require("./routes/jobs"));
+ const disputes_1 = __importDefault(require("./routes/disputes"));
+@@ -14,12 +15,17 @@ const appeals_1 = __importDefault(require("./routes/appeals"));
+ const users_1 = __importDefault(require("./routes/users"));
+ const activity_1 = __importDefault(require("./routes/activity"));
+ const uploads_1 = __importDefault(require("./routes/uploads"));
++const bulk_1 = __importDefault(require("./routes/bulk"));
++const pool_1 = __importDefault(require("./routes/pool"));
++const state_1 = __importDefault(require("./routes/state"));
+ dotenv_1.default.config();
+ const app = (0, express_1.default)();
+ const port = process.env.PORT || 3001;
++const logger = tracing_1.trace.getLogger("server");
+ // Enable CORS for frontend requests
+ app.use((0, cors_1.default)({ origin: "*" }));
+ app.use(express_1.default.json());
++app.use(tracing_1.tracingMiddleware); // Global request tracing and diagnostics
+ // Mount API routes
+ app.use("/api/v1/auth", auth_1.default);
+ app.use("/api/v1/jobs", jobs_1.default);
+@@ -28,17 +34,73 @@ app.use("/api/v1/appeals", appeals_1.default);
+ app.use("/api/v1/users", users_1.default);
+ app.use("/api/v1/activity", activity_1.default);
+ app.use("/api/v1/uploads", uploads_1.default);
++app.use("/api/v1/bulk", bulk_1.default);
++app.use("/api/v1/pool", pool_1.default);
++app.use("/api/v1/state", state_1.default);
+ // Basic healthcheck route
+ app.get("/health", async (req, res) => {
++ const startTime = Date.now();
++ logger.debug("Health check requested");
+ try {
+ // Ping DB to ensure it's alive
+ await db_1.prisma.$queryRaw `SELECT 1`;
+- res.status(200).json({ status: "ok", db: "connected" });
++ const duration = Date.now() - startTime;
++ logger.info("Health check passed", {
++ status: "ok",
++ db: "connected",
++ duration,
++ });
++ res.status(200).json({
++ status: "ok",
++ db: "connected",
++ timestamp: new Date().toISOString(),
++ uptime: process.uptime(),
++ });
+ }
+ catch (error) {
+- res.status(503).json({ status: "error", db: "disconnected" });
++ const duration = Date.now() - startTime;
++ logger.error("Health check failed", {
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
++ res.status(503).json({
++ status: "error",
++ db: "disconnected",
++ error: error instanceof Error ? error.message : "Unknown error",
++ timestamp: new Date().toISOString(),
++ });
+ }
+ });
+-app.listen(port, () => {
+- console.log(`⚡️[server]: Server is running at http://localhost:${port}`);
++// Graceful shutdown handler
++process.on("SIGTERM", async () => {
++ logger.info("SIGTERM received, shutting down gracefully");
++ try {
++ await db_1.prisma.$disconnect();
++ logger.info("Database connection closed");
++ process.exit(0);
++ }
++ catch (error) {
++ logger.error("Error during shutdown", {
++ error: error instanceof Error ? error.message : String(error),
++ });
++ process.exit(1);
++ }
+ });
++// ---------------------------------------------------------------------------
++// Start the server — validate the DB connection with retry backoff first,
++// then kick off background pool health-checking.
++// ---------------------------------------------------------------------------
++async function bootstrap() {
++ try {
++ await (0, db_1.connectWithRetry)();
++ (0, db_1.startPoolHealthCheck)();
++ app.listen(port, () => {
++ console.log(`⚡️[server]: Server is running at http://localhost:${port}`);
++ });
++ }
++ catch (err) {
++ console.error(`❌ Failed to start server: ${err.message}`);
++ process.exit(1);
++ }
++}
++bootstrap();
+diff --git a/backend/dist/routes/bulk.js b/backend/dist/routes/bulk.js
+new file mode 100644
+index 0000000..0eda417
+--- /dev/null
++++ b/backend/dist/routes/bulk.js
+@@ -0,0 +1,204 @@
++"use strict";
++Object.defineProperty(exports, "__esModule", { value: true });
++const express_1 = require("express");
++const zod_1 = require("zod");
++const transaction_1 = require("../utils/transaction");
++const tracing_1 = require("../utils/tracing");
++const router = (0, express_1.Router)();
++// Validation Schemas
++const singleJobSchema = zod_1.z.object({
++ title: zod_1.z.string().min(1, "Title is required"),
++ description: zod_1.z.string().optional().default(""),
++ budget_usdc: zod_1.z.number().int().positive("Budget must be greater than zero"),
++ milestones: zod_1.z.number().int().min(1, "Milestones count must be at least 1"),
++ client_address: zod_1.z.string().min(1, "Client address is required"),
++});
++const bulkJobsSchema = zod_1.z.object({
++ jobs: zod_1.z.array(singleJobSchema).min(1, "At least one job is required for bulk creation"),
++});
++const singleReleaseSchema = zod_1.z.object({
++ jobId: zod_1.z.string().uuid("Invalid jobId UUID format"),
++ milestoneId: zod_1.z.string().uuid("Invalid milestoneId UUID format"),
++});
++const bulkReleaseSchema = zod_1.z.object({
++ releases: zod_1.z.array(singleReleaseSchema).min(1, "At least one milestone release request is required"),
++});
++/**
++ * POST /api/v1/bulk/jobs
++ * Atomically creates multiple jobs, each with its respective milestones.
++ * If any validation or creation step fails, the ENTIRE batch is rolled back.
++ */
++router.post("/jobs", async (req, res) => {
++ try {
++ // 1. Validate bulk request format
++ const parsed = bulkJobsSchema.parse(req.body);
++ tracing_1.logger.info(`Starting bulk job creation for ${parsed.jobs.length} jobs`);
++ // 2. Execute within an atomic repeatable read transaction to guarantee lock isolation
++ const createdJobs = await (0, transaction_1.runInTransaction)(async (tx) => {
++ const results = [];
++ for (let i = 0; i < parsed.jobs.length; i++) {
++ const data = parsed.jobs[i];
++ tracing_1.logger.debug(`Processing bulk creation for job index ${i}: "${data.title}"`);
++ // Create parent Job record
++ const job = await tx.jobs.create({
++ data: {
++ title: data.title,
++ description: data.description,
++ budget_usdc: BigInt(data.budget_usdc),
++ milestones: data.milestones,
++ client_address: data.client_address,
++ status: "open",
++ },
++ });
++ // Compute milestone allocations
++ const perMilestone = Math.floor(data.budget_usdc / data.milestones);
++ const remainder = data.budget_usdc % data.milestones;
++ const milestoneRecords = Array.from({ length: data.milestones }).map((_, index) => {
++ const amount_usdc = index === data.milestones - 1 ? perMilestone + remainder : perMilestone;
++ return {
++ job_id: job.id,
++ index: index + 1,
++ title: `Milestone ${index + 1} of ${data.milestones}`,
++ amount_usdc: BigInt(amount_usdc),
++ status: "pending",
++ };
++ });
++ // Create child Milestone records
++ await tx.milestones.createMany({
++ data: milestoneRecords,
++ });
++ // Fetch back milestones for serializable return
++ const dbMilestones = await tx.milestones.findMany({
++ where: { job_id: job.id },
++ orderBy: { index: "asc" },
++ });
++ results.push({
++ ...job,
++ budget_usdc: Number(job.budget_usdc),
++ on_chain_job_id: job.on_chain_job_id ? Number(job.on_chain_job_id) : null,
++ milestones: dbMilestones.map((m) => ({
++ ...m,
++ amount_usdc: Number(m.amount_usdc),
++ })),
++ });
++ }
++ return results;
++ }, { isolationLevel: "REPEATABLE READ" });
++ res.status(201).json({
++ success: true,
++ message: `Successfully created ${createdJobs.length} jobs atomically`,
++ jobs: createdJobs,
++ });
++ }
++ catch (error) {
++ if (error instanceof zod_1.z.ZodError) {
++ return res.status(400).json({
++ success: false,
++ error: "Validation failed",
++ issues: error.issues,
++ });
++ }
++ tracing_1.logger.error(`Bulk job creation aborted and rolled back. Error: ${error.message || error}`);
++ res.status(500).json({
++ success: false,
++ error: "Transaction rolled back due to error",
++ details: error.message || error,
++ });
++ }
++});
++/**
++ * POST /api/v1/bulk/milestones/release
++ * Atomically releases multiple milestones, updates their respective parent jobs,
++ * and records auditing milestone events.
++ * Strictly rolls back if any individual release requirement (e.g. missing deliverable) fails.
++ */
++router.post("/milestones/release", async (req, res) => {
++ try {
++ const parsed = bulkReleaseSchema.parse(req.body);
++ tracing_1.logger.info(`Starting bulk milestone release for ${parsed.releases.length} milestones`);
++ const releaseResults = await (0, transaction_1.runInTransaction)(async (tx) => {
++ const results = [];
++ for (let i = 0; i < parsed.releases.length; i++) {
++ const { jobId, milestoneId } = parsed.releases[i];
++ tracing_1.logger.debug(`Verifying and releasing milestone ID ${milestoneId} for Job ${jobId}`);
++ // Find existing milestone
++ const milestone = await tx.milestones.findUnique({
++ where: { id: milestoneId, job_id: jobId },
++ });
++ if (!milestone) {
++ throw new Error(`Milestone ID ${milestoneId} was not found under Job ID ${jobId}`);
++ }
++ if (milestone.status !== "pending") {
++ throw new Error(`Milestone ID ${milestoneId} cannot be released because its status is '${milestone.status}' (expected 'pending')`);
++ }
++ // Verify milestone deliverable is submitted
++ const deliverableExists = await tx.deliverables.findFirst({
++ where: { job_id: jobId, milestone_index: milestone.index },
++ });
++ if (!deliverableExists) {
++ throw new Error(`A deliverable must be submitted for Milestone index ${milestone.index} under Job ID ${jobId} before releasing it`);
++ }
++ const txHash = `mock-bulk-release-tx-${milestoneId.slice(0, 8)}`;
++ // Update Milestone Status
++ const updatedMilestone = await tx.milestones.update({
++ where: { id: milestoneId },
++ data: {
++ status: "released",
++ tx_hash: txHash,
++ released_at: new Date(),
++ completed_at: new Date(),
++ },
++ });
++ // Create Milestone Audit Event
++ await tx.milestone_events.create({
++ data: {
++ milestone_id: milestoneId,
++ job_id: jobId,
++ event_type: "released",
++ tx_hash: txHash,
++ note: "Released atomically via bulk operation",
++ },
++ });
++ // Recalculate remaining pending milestones
++ const remainingPending = await tx.milestones.count({
++ where: { job_id: jobId, status: "pending" },
++ });
++ const nextJobStatus = remainingPending === 0 ? "completed" : "funded";
++ // Update Job Status
++ const updatedJob = await tx.jobs.update({
++ where: { id: jobId },
++ data: { status: nextJobStatus },
++ });
++ results.push({
++ milestoneId,
++ jobId,
++ status: "released",
++ jobStatus: nextJobStatus,
++ amount_usdc: Number(updatedMilestone.amount_usdc),
++ });
++ }
++ return results;
++ }, { isolationLevel: "SERIALIZABLE" }); // Use Serializable isolation to prevent double-release race conditions
++ res.status(200).json({
++ success: true,
++ message: `Successfully released ${releaseResults.length} milestones atomically`,
++ releases: releaseResults,
++ });
++ }
++ catch (error) {
++ if (error instanceof zod_1.z.ZodError) {
++ return res.status(400).json({
++ success: false,
++ error: "Validation failed",
++ issues: error.issues,
++ });
++ }
++ tracing_1.logger.error(`Bulk milestone release aborted and rolled back. Error: ${error.message || error}`);
++ res.status(500).json({
++ success: false,
++ error: "Transaction rolled back due to error",
++ details: error.message || error,
++ });
++ }
++});
++exports.default = router;
+diff --git a/backend/dist/routes/diagnostics.js b/backend/dist/routes/diagnostics.js
+new file mode 100644
+index 0000000..4b70a71
+--- /dev/null
++++ b/backend/dist/routes/diagnostics.js
+@@ -0,0 +1,84 @@
++"use strict";
++Object.defineProperty(exports, "__esModule", { value: true });
++const express_1 = require("express");
++const tracing_1 = require("../utils/tracing");
++const db_1 = require("../config/db");
++const router = (0, express_1.Router)();
++/**
++ * GET /api/v1/diagnostics/request-info
++ *
++ * Returns sanitized request diagnostics for the current request.
++ * Sensitive headers (authorization, cookies, API keys, tokens, etc.)
++ * are automatically redacted so this endpoint is safe to expose to
++ * monitoring dashboards and log aggregators.
++ */
++router.get("/request-info", async (req, res) => {
++ try {
++ const safeHeaders = (0, tracing_1.sanitizeHeaders)(req.headers);
++ tracing_1.logger.info("Diagnostics: request-info endpoint accessed", {
++ method: req.method,
++ url: req.originalUrl,
++ });
++ res.status(200).json({
++ request: {
++ method: req.method,
++ url: req.originalUrl,
++ path: req.path,
++ protocol: req.protocol,
++ ip: req.ip,
++ hostname: req.hostname,
++ headers: safeHeaders,
++ query: req.query,
++ },
++ server: {
++ nodeVersion: process.version,
++ platform: process.platform,
++ uptime: Math.floor(process.uptime()),
++ memoryUsage: {
++ rss: Math.round(process.memoryUsage().rss / 1024 / 1024),
++ heapUsed: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
++ heapTotal: Math.round(process.memoryUsage().heapTotal / 1024 / 1024),
++ external: Math.round(process.memoryUsage().external / 1024 / 1024),
++ },
++ },
++ pool: {
++ totalConnections: db_1.pool.totalCount,
++ idleConnections: db_1.pool.idleCount,
++ waitingRequests: db_1.pool.waitingCount,
++ },
++ });
++ }
++ catch (error) {
++ tracing_1.logger.error("Diagnostics: request-info error", { error: error.message });
++ res.status(500).json({ error: "Failed to retrieve diagnostics" });
++ }
++});
++/**
++ * POST /api/v1/diagnostics/sanitize-test
++ *
++ * Accepts an arbitrary JSON body and returns the sanitized version.
++ * Useful for verifying that the sanitization rules are correctly
++ * stripping secrets from structured payloads before they reach logs.
++ *
++ * Example request body:
++ * {
++ * "authorization": "Bearer eyJhbG...",
++ * "user": "alice",
++ * "nested": { "password": "s3cret", "data": 42 }
++ * }
++ */
++router.post("/sanitize-test", async (req, res) => {
++ try {
++ const sanitized = (0, tracing_1.sanitizeMeta)(req.body);
++ tracing_1.logger.debug("Diagnostics: sanitize-test endpoint invoked");
++ res.status(200).json({
++ original_keys: Object.keys(req.body || {}),
++ sanitized,
++ });
++ }
++ catch (error) {
++ tracing_1.logger.error("Diagnostics: sanitize-test error", { error: error.message });
++ res.status(500).json({ error: "Failed to sanitize payload" });
++ }
++});
++exports.default = router;
+diff --git a/backend/dist/routes/jobs.js b/backend/dist/routes/jobs.js
+index de4bde6..270083f 100644
+--- a/backend/dist/routes/jobs.js
++++ b/backend/dist/routes/jobs.js
+@@ -10,6 +10,7 @@ const bids_1 = __importDefault(require("./bids"));
+ const milestones_1 = __importDefault(require("./milestones"));
+ const deliverables_1 = __importDefault(require("./deliverables"));
+ const job_disputes_1 = __importDefault(require("./job-disputes"));
++const tracing_1 = require("../utils/tracing");
+ const router = (0, express_1.Router)();
+ // Validation schemas
+ const getJobsQuerySchema = zod_1.z.object({
+@@ -17,6 +18,13 @@ const getJobsQuerySchema = zod_1.z.object({
+ status: zod_1.z.string().optional(),
+ tag: zod_1.z.string().optional(),
+ sort: zod_1.z.string().optional(),
++ limit: zod_1.z.coerce.number().int().min(1).max(100).default(25),
++ cursor_created_at: zod_1.z.coerce.date().optional(),
++ cursor_id: zod_1.z.string().uuid().optional(),
++ min_budget: zod_1.z.coerce.number().int().nonnegative().optional(),
++ max_budget: zod_1.z.coerce.number().int().nonnegative().optional(),
++ skills: zod_1.z.string().optional(),
++ deadline_before: zod_1.z.coerce.date().optional(),
+ });
+ const createJobSchema = zod_1.z.object({
+ title: zod_1.z.string().min(1, "title is required"),
+@@ -24,40 +32,100 @@ const createJobSchema = zod_1.z.object({
+ budget_usdc: zod_1.z.number().int().positive("budget must be greater than zero"),
+ milestones: zod_1.z.number().int().min(1, "milestones must be at least 1"),
+ client_address: zod_1.z.string().min(1),
++ skills: zod_1.z.array(zod_1.z.string()).optional().default([]),
++ deadline_at: zod_1.z.coerce.date().optional(),
+ });
+ const markFundedSchema = zod_1.z.object({
+ client_address: zod_1.z.string().min(1),
+ });
++function serializeJob(row) {
++ return {
++ ...row,
++ budget_usdc: Number(row.budget_usdc),
++ on_chain_job_id: row.on_chain_job_id ? Number(row.on_chain_job_id) : null,
++ };
++}
+ // GET /api/v1/jobs
+ router.get("/", async (req, res) => {
+ try {
+ const query = getJobsQuerySchema.parse(req.query);
+- let whereClause = {};
++ if ((query.cursor_created_at && !query.cursor_id) || (!query.cursor_created_at && query.cursor_id)) {
++ return res.status(400).json({
++ error: "cursor_created_at and cursor_id must be provided together",
++ });
++ }
++ if (query.min_budget !== undefined &&
++ query.max_budget !== undefined &&
++ query.min_budget > query.max_budget) {
++ return res.status(400).json({ error: "min_budget cannot be greater than max_budget" });
++ }
++ const conditions = [];
++ const params = [];
++ const addParam = (value) => {
++ params.push(value);
++ return `$${params.length}`;
++ };
+ if (query.query || (query.tag && query.tag !== "all")) {
+ const searchTerm = query.query || query.tag;
+- whereClause.OR = [
+- { title: { contains: searchTerm, mode: "insensitive" } },
+- { description: { contains: searchTerm, mode: "insensitive" } },
+- ];
++ const placeholder = addParam(`%${searchTerm}%`);
++ conditions.push(`(title ILIKE ${placeholder} OR description ILIKE ${placeholder})`);
+ }
+ if (query.status) {
+- whereClause.status = query.status;
++ conditions.push(`status = ${addParam(query.status)}`);
++ }
++ if (query.min_budget !== undefined) {
++ conditions.push(`budget_usdc >= ${addParam(query.min_budget)}`);
++ }
++ if (query.max_budget !== undefined) {
++ conditions.push(`budget_usdc <= ${addParam(query.max_budget)}`);
++ }
++ if (query.skills) {
++ const skills = query.skills
++ .split(",")
++ .map((skill) => skill.trim())
++ .filter(Boolean);
++ if (skills.length > 0) {
++ conditions.push(`skills && ${addParam(skills)}::text[]`);
++ }
+ }
+- let orderByClause = { created_at: "desc" };
+- if (query.sort === "budget") {
+- orderByClause = { budget_usdc: "desc" };
++ if (query.deadline_before) {
++ conditions.push(`deadline_at <= ${addParam(query.deadline_before)}`);
+ }
+- const jobs = await db_1.prisma.jobs.findMany({
+- where: whereClause,
+- orderBy: orderByClause,
++ if (query.cursor_created_at && query.cursor_id) {
++ conditions.push(`(created_at, id) < (${addParam(query.cursor_created_at)}, ${addParam(query.cursor_id)}::uuid)`);
++ }
++ const whereSql = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
++ const orderSql = query.sort === "budget"
++ ? "ORDER BY budget_usdc DESC, created_at DESC, id DESC"
++ : "ORDER BY created_at DESC, id DESC";
++ const limitPlaceholder = addParam(query.limit + 1);
++ const result = await db_1.pool.query(`SELECT id, title, description, budget_usdc, milestones, client_address,
++ freelancer_address, status, metadata_hash, on_chain_job_id, skills, deadline_at,
++ created_at, updated_at
++ FROM jobs
++ ${whereSql}
++ ${orderSql}
++ LIMIT ${limitPlaceholder}`, params);
++ const rows = result.rows;
++ const hasNext = rows.length > query.limit;
++ const items = (hasNext ? rows.slice(0, query.limit) : rows).map(serializeJob);
++ const cursorSource = hasNext ? items[items.length - 1] : null;
++ tracing_1.logger.info("Paginated jobs queried", {
++ returned: items.length,
++ hasNext,
++ status: query.status || "any",
++ sort: query.sort || "created_at",
++ });
++ res.json({
++ items,
++ next_cursor: cursorSource
++ ? {
++ created_at: cursorSource.created_at,
++ id: cursorSource.id,
++ }
++ : null,
++ limit: query.limit,
+ });
+- // Convert BigInt to Number/String for JSON serialization
+- const serializedJobs = jobs.map((job) => ({
+- ...job,
+- budget_usdc: Number(job.budget_usdc),
+- on_chain_job_id: job.on_chain_job_id ? Number(job.on_chain_job_id) : null,
+- }));
+- res.json(serializedJobs);
+ }
+ catch (error) {
+ if (error instanceof zod_1.z.ZodError) {
+@@ -80,6 +148,8 @@ router.post("/", async (req, res) => {
+ milestones: data.milestones,
+ client_address: data.client_address,
+ status: "open",
++ skills: data.skills,
++ deadline_at: data.deadline_at,
+ },
+ });
+ const perMilestone = Math.floor(data.budget_usdc / data.milestones);
+diff --git a/backend/dist/routes/pool.js b/backend/dist/routes/pool.js
+new file mode 100644
+index 0000000..5c4ff08
+--- /dev/null
++++ b/backend/dist/routes/pool.js
+@@ -0,0 +1,114 @@
++"use strict";
++Object.defineProperty(exports, "__esModule", { value: true });
++const express_1 = require("express");
++const db_1 = require("../config/db");
++const tracing_1 = require("../utils/tracing");
++const router = (0, express_1.Router)();
++/**
++ * GET /api/v1/pool/health
++ *
++ * Returns detailed connection pool health statistics including:
++ * - current total / idle / active connection counts
++ * - waiting request queue depth
++ * - configured pool limits and timeouts
++ * - background health-check status and history
++ * - pool uptime
++ *
++ * Responds 200 when the last background health-check passed, 503 otherwise.
++ */
++router.get("/health", async (req, res) => {
++ const startTime = process.hrtime();
++ try {
++ const stats = (0, db_1.getPoolHealthStats)();
++ // Perform a live probe so the caller gets real-time validation
++ let liveProbeOk = false;
++ let liveProbeLatencyMs = 0;
++ try {
++ const probeStart = process.hrtime();
++ const client = await db_1.pool.connect();
++ await client.query("SELECT 1");
++ client.release();
++ const probeDuration = process.hrtime(probeStart);
++ liveProbeLatencyMs = parseFloat((probeDuration[0] * 1000 + probeDuration[1] / 1_000_000).toFixed(2));
++ liveProbeOk = true;
++ }
++ catch (probeErr) {
++ tracing_1.logger.error("Pool live-probe failed", { error: probeErr.message });
++ }
++ const duration = process.hrtime(startTime);
++ const totalLatencyMs = parseFloat((duration[0] * 1000 + duration[1] / 1_000_000).toFixed(2));
++ const healthy = liveProbeOk && stats.lastHealthCheckOk;
++ tracing_1.logger.info("Pool health endpoint hit", {
++ healthy,
++ liveProbeOk,
++ liveProbeLatencyMs,
++ ...stats,
++ });
++ res.status(healthy ? 200 : 503).json({
++ status: healthy ? "healthy" : "degraded",
++ pool: {
++ totalConnections: stats.totalConnections,
++ idleConnections: stats.idleConnections,
++ activeConnections: stats.activeConnections,
++ waitingRequests: stats.waitingRequests,
++ },
++ config: {
++ maxConnections: stats.maxConnections,
++ minConnections: stats.minConnections,
++ idleTimeoutMs: stats.idleTimeoutMs,
++ connectionTimeoutMs: stats.connectionTimeoutMs,
++ healthCheckIntervalMs: stats.healthCheckIntervalMs,
++ },
++ healthCheck: {
++ lastCheckAt: stats.lastHealthCheckAt,
++ lastCheckOk: stats.lastHealthCheckOk,
++ passed: stats.healthChecksPassed,
++ failed: stats.healthChecksFailed,
++ },
++ liveProbe: {
++ ok: liveProbeOk,
++ latencyMs: liveProbeLatencyMs,
++ },
++ uptimeSeconds: stats.uptimeSeconds,
++ responseTimeMs: totalLatencyMs,
++ });
++ }
++ catch (error) {
++ tracing_1.logger.error("Pool health endpoint error", { error: error.message });
++ res.status(500).json({
++ status: "error",
++ error: "Failed to retrieve pool health statistics",
++ });
++ }
++});
++/**
++ * GET /api/v1/pool/stats
++ *
++ * Lightweight endpoint returning only numeric pool counters.
++ * Suitable for Prometheus-style scraping or lightweight monitoring.
++ */
++router.get("/stats", async (req, res) => {
++ try {
++ const stats = (0, db_1.getPoolHealthStats)();
++ tracing_1.logger.debug("Pool stats endpoint hit", {
++ total: stats.totalConnections,
++ idle: stats.idleConnections,
++ });
++ res.status(200).json({
++ totalConnections: stats.totalConnections,
++ idleConnections: stats.idleConnections,
++ activeConnections: stats.activeConnections,
++ waitingRequests: stats.waitingRequests,
++ maxConnections: stats.maxConnections,
++ minConnections: stats.minConnections,
++ uptimeSeconds: stats.uptimeSeconds,
++ healthChecksPassed: stats.healthChecksPassed,
++ healthChecksFailed: stats.healthChecksFailed,
++ });
++ }
++ catch (error) {
++ tracing_1.logger.error("Pool stats endpoint error", { error: error.message });
++ res.status(500).json({ error: "Failed to retrieve pool statistics" });
++ }
++});
++exports.default = router;
+diff --git a/backend/dist/routes/state.js b/backend/dist/routes/state.js
+new file mode 100644
+index 0000000..afb19b6
+--- /dev/null
++++ b/backend/dist/routes/state.js
+@@ -0,0 +1,51 @@
++"use strict";
++Object.defineProperty(exports, "__esModule", { value: true });
++const express_1 = require("express");
++const zod_1 = require("zod");
++const db_1 = require("../config/db");
++const tracing_1 = require("../utils/tracing");
++const router = (0, express_1.Router)();
++const recoveryQuerySchema = zod_1.z.object({
++ status: zod_1.z.enum(["pending", "committed", "failed", "abandoned"]).optional(),
++ limit: zod_1.z.coerce.number().int().min(1).max(200).default(50),
++});
++/**
++ * GET /api/v1/state/write-recovery
++ *
++ * Lists durable write-recovery rows for interrupted or retryable database
++ * mutations. The query is intentionally bounded and ordered by the indexed
++ * status/updated_at tuple from the migration to avoid table scans under load.
++ */
++router.get("/write-recovery", async (req, res) => {
++ try {
++ const query = recoveryQuerySchema.parse(req.query);
++ const params = [query.limit];
++ let sql = `
++ SELECT id, idempotency_key, operation, entity_type, entity_id, status,
++ attempts, last_error, recovery_payload, created_at, updated_at
++ FROM write_recovery_records
++ `;
++ if (query.status) {
++ params.unshift(query.status);
++ sql += " WHERE status = $1 ORDER BY updated_at DESC, id DESC LIMIT $2";
++ }
++ else {
++ sql += " ORDER BY updated_at DESC, id DESC LIMIT $1";
++ }
++ const result = await db_1.pool.query(sql, params);
++ tracing_1.logger.info("Write recovery state queried", {
++ status: query.status || "any",
++ limit: query.limit,
++ returned: result.rowCount,
++ });
++ res.status(200).json(result.rows);
++ }
++ catch (error) {
++ if (error instanceof zod_1.z.ZodError) {
++ return res.status(400).json({ error: error.issues });
++ }
++ tracing_1.logger.error("Write recovery state query failed", { error: error.message });
++ res.status(500).json({ error: "Failed to retrieve write recovery state" });
++ }
++});
++exports.default = router;
+diff --git a/backend/dist/routes/users.js b/backend/dist/routes/users.js
+index 0a661e9..f0f65f8 100644
+--- a/backend/dist/routes/users.js
++++ b/backend/dist/routes/users.js
+@@ -2,33 +2,75 @@
+ Object.defineProperty(exports, "__esModule", { value: true });
+ const express_1 = require("express");
+ const db_1 = require("../config/db");
++const tracing_1 = require("../config/tracing");
+ const zod_1 = require("zod");
+ const router = (0, express_1.Router)();
++const logger = tracing_1.trace.getLogger("users-routes");
++// Pagination schema for all address mapping queries
++const paginationSchema = zod_1.z.object({
++ page: zod_1.z.string().optional().default("1").transform(v => Math.max(1, parseInt(v, 10) || 1)),
++ limit: zod_1.z.string().optional().default("50").transform(v => {
++ const parsed = parseInt(v, 10) || 50;
++ return Math.min(Math.max(1, parsed), 100); // Enforce 1-100 limit
++ }),
++});
+ const updateProfileSchema = zod_1.z.object({
+ display_name: zod_1.z.string().optional().nullable(),
+ headline: zod_1.z.string().optional().default(""),
+ bio: zod_1.z.string().optional().default(""),
+ portfolio_links: zod_1.z.array(zod_1.z.string()).optional().default([]),
+ });
+-// GET /api/v1/users
++// GET /api/v1/users - List all user addresses with pagination
+ router.get("/", async (req, res) => {
++ const startTime = Date.now();
++ logger.debug("GET /users request received", { query: req.query });
+ try {
+- const users = await db_1.prisma.profiles.findMany({
+- select: { address: true },
+- distinct: ["address"],
+- orderBy: { address: "asc" },
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++ logger.info("Fetching paginated user addresses", { page, limit, skip });
++ const [users, total] = await Promise.all([
++ db_1.prisma.profiles.findMany({
++ select: { address: true },
++ distinct: ["address"],
++ orderBy: { address: "asc" },
++ skip,
++ take: limit,
++ }),
++ db_1.prisma.profiles.count(),
++ ]);
++ const duration = Date.now() - startTime;
++ logger.info("User addresses fetched successfully", {
++ count: users.length,
++ total,
++ page,
++ limit,
++ duration,
++ });
++ res.status(200).json({
++ data: users.map(u => u.address),
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
+ });
+- res.json(users.map(u => u.address));
+ }
+ catch (error) {
+- console.error("GET /users error:", error);
++ const duration = Date.now() - startTime;
++ logger.error("GET /users error", {
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
+ res.status(500).json({ error: "Internal server error" });
+ }
+ });
+ // GET /api/v1/users/:address/profile
+ router.get("/:address/profile", async (req, res) => {
++ const startTime = Date.now();
++ const { address } = req.params;
++ logger.debug("GET /users/:address/profile request", { address });
+ try {
+- const { address } = req.params;
+ const profile = await db_1.prisma.profiles.findUnique({
+ where: { address },
+ });
+@@ -77,7 +119,14 @@ router.get("/:address/profile", async (req, res) => {
+ dispute_rate,
+ };
+ const portfolio_links = profile?.portfolio_links ? profile.portfolio_links.filter(v => typeof v === "string") : [];
+- res.json({
++ const duration = Date.now() - startTime;
++ logger.info("User profile fetched successfully", {
++ address,
++ total_jobs,
++ completed_jobs,
++ duration,
++ });
++ res.status(200).json({
+ address,
+ display_name: profile?.display_name || null,
+ headline: profile?.headline || "",
+@@ -89,14 +138,21 @@ router.get("/:address/profile", async (req, res) => {
+ });
+ }
+ catch (error) {
+- console.error("GET /users/:address/profile error:", error);
++ const duration = Date.now() - startTime;
++ logger.error("GET /users/:address/profile error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
+ res.status(500).json({ error: "Internal server error" });
+ }
+ });
+ // PUT /api/v1/users/:address/profile
+ router.put("/:address/profile", async (req, res) => {
++ const startTime = Date.now();
++ const { address } = req.params;
++ logger.debug("PUT /users/:address/profile request", { address });
+ try {
+- const { address } = req.params;
+ const data = updateProfileSchema.parse(req.body);
+ const portfolio_links = data.portfolio_links
+ .map(l => l.trim())
+@@ -118,31 +174,262 @@ router.put("/:address/profile", async (req, res) => {
+ portfolio_links,
+ },
+ });
+- // Re-fetch to return full profile
+- // Note: To match exact Rust functionality, we would redirect to the GET function,
+- // but fetching directly here is cleaner. We will just redirect or return success.
++ const duration = Date.now() - startTime;
++ logger.info("User profile updated successfully", {
++ address,
++ duration,
++ });
+ res.status(200).json({ success: true });
+ }
+ catch (error) {
++ const duration = Date.now() - startTime;
+ if (error instanceof zod_1.z.ZodError) {
++ logger.warn("Profile validation failed", {
++ address,
++ errors: error.issues,
++ duration,
++ });
+ return res.status(400).json({ error: error.issues[0]?.message || "Validation failed" });
+ }
+- console.error("PUT /users/:address/profile error:", error);
++ logger.error("PUT /users/:address/profile error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
+ res.status(500).json({ error: "Internal server error" });
+ }
+ });
+-// GET /api/v1/users/:address/saved-jobs
++// GET /api/v1/users/:address/saved-jobs - Get paginated saved jobs for user
+ router.get("/:address/saved-jobs", async (req, res) => {
++ const startTime = Date.now();
++ const { address } = req.params;
+ try {
+- const { address } = req.params;
+- const savedJobs = await db_1.prisma.saved_jobs.findMany({
+- where: { user_address: address },
+- orderBy: { created_at: "desc" },
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++ logger.debug("GET /users/:address/saved-jobs request", { address, page, limit });
++ const [savedJobs, total] = await Promise.all([
++ db_1.prisma.saved_jobs.findMany({
++ where: { user_address: address },
++ orderBy: { created_at: "desc" },
++ skip,
++ take: limit,
++ }),
++ db_1.prisma.saved_jobs.count({ where: { user_address: address } }),
++ ]);
++ const duration = Date.now() - startTime;
++ logger.info("Saved jobs fetched successfully", {
++ address,
++ count: savedJobs.length,
++ total,
++ page,
++ limit,
++ duration,
++ });
++ res.status(200).json({
++ data: savedJobs,
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
+ });
+- res.json(savedJobs);
+ }
+ catch (error) {
+- console.error("GET /users/:address/saved-jobs error:", error);
++ const duration = Date.now() - startTime;
++ logger.error("GET /users/:address/saved-jobs error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
++ res.status(500).json({ error: "Internal server error" });
++ }
++});
++// GET /api/v1/users/address-mappings - List all user address mappings with pagination and filtering
++router.get("/address-mappings/list", async (req, res) => {
++ const startTime = Date.now();
++ logger.debug("GET /address-mappings request", { query: req.query });
++ try {
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++ const filterType = req.query.type?.toLowerCase() || "all";
++ logger.info("Fetching address mappings", { page, limit, filterType });
++ let addressMappings = [];
++ let total = 0;
++ if (filterType === "profiles" || filterType === "all") {
++ const profiles = await db_1.prisma.profiles.findMany({
++ select: { address: true, display_name: true, updated_at: true },
++ orderBy: { updated_at: "desc" },
++ skip,
++ take: limit,
++ });
++ const profileCount = await db_1.prisma.profiles.count();
++ addressMappings = profiles.map(p => ({
++ address: p.address,
++ type: "profile",
++ display_name: p.display_name,
++ updated_at: p.updated_at,
++ }));
++ total = profileCount;
++ }
++ else if (filterType === "sessions") {
++ const sessions = await db_1.prisma.sessions.findMany({
++ select: { address: true, expires_at: true },
++ orderBy: { expires_at: "desc" },
++ skip,
++ take: limit,
++ });
++ const sessionCount = await db_1.prisma.sessions.count();
++ addressMappings = sessions.map(s => ({
++ address: s.address,
++ type: "session",
++ expires_at: s.expires_at,
++ }));
++ total = sessionCount;
++ }
++ else if (filterType === "arbiters") {
++ const arbiters = await db_1.prisma.arbiters.findMany({
++ select: { address: true, active: true, created_at: true },
++ orderBy: { created_at: "desc" },
++ skip,
++ take: limit,
++ });
++ const arbiterCount = await db_1.prisma.arbiters.count();
++ addressMappings = arbiters.map(a => ({
++ address: a.address,
++ type: "arbiter",
++ active: a.active,
++ created_at: a.created_at,
++ }));
++ total = arbiterCount;
++ }
++ const duration = Date.now() - startTime;
++ logger.info("Address mappings fetched successfully", {
++ count: addressMappings.length,
++ total,
++ filterType,
++ duration,
++ });
++ res.status(200).json({
++ data: addressMappings,
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
++ filter: filterType,
++ });
++ }
++ catch (error) {
++ const duration = Date.now() - startTime;
++ logger.error("GET /address-mappings error", {
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
++ res.status(500).json({ error: "Internal server error" });
++ }
++});
++// GET /api/v1/users/:address/activity - Get paginated activity log for user address
++router.get("/:address/activity", async (req, res) => {
++ const startTime = Date.now();
++ const { address } = req.params;
++ try {
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++ logger.debug("GET /users/:address/activity request", { address, page, limit });
++ const [activities, total] = await Promise.all([
++ db_1.prisma.activity_logs.findMany({
++ where: { user_address: address },
++ orderBy: { created_at: "desc" },
++ skip,
++ take: limit,
++ }),
++ db_1.prisma.activity_logs.count({ where: { user_address: address } }),
++ ]);
++ const duration = Date.now() - startTime;
++ logger.info("User activity fetched successfully", {
++ address,
++ count: activities.length,
++ total,
++ page,
++ limit,
++ duration,
++ });
++ res.status(200).json({
++ data: activities,
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
++ });
++ }
++ catch (error) {
++ const duration = Date.now() - startTime;
++ logger.error("GET /users/:address/activity error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
++ res.status(500).json({ error: "Internal server error" });
++ }
++});
++// GET /api/v1/users/:address/jobs - Get paginated jobs for user (as client or freelancer)
++router.get("/:address/jobs", async (req, res) => {
++ const startTime = Date.now();
++ const { address } = req.params;
++ try {
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++ const status = req.query.status?.toLowerCase() || "all";
++ logger.debug("GET /users/:address/jobs request", { address, page, limit, status });
++ const whereCondition = status === "all"
++ ? {
++ OR: [{ client_address: address }, { freelancer_address: address }],
++ }
++ : {
++ status,
++ OR: [{ client_address: address }, { freelancer_address: address }],
++ };
++ const [jobs, total] = await Promise.all([
++ db_1.prisma.jobs.findMany({
++ where: whereCondition,
++ orderBy: { created_at: "desc" },
++ skip,
++ take: limit,
++ }),
++ db_1.prisma.jobs.count({ where: whereCondition }),
++ ]);
++ const duration = Date.now() - startTime;
++ logger.info("User jobs fetched successfully", {
++ address,
++ count: jobs.length,
++ total,
++ page,
++ limit,
++ status,
++ duration,
++ });
++ res.status(200).json({
++ data: jobs,
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
++ filter: { status },
++ });
++ }
++ catch (error) {
++ const duration = Date.now() - startTime;
++ logger.error("GET /users/:address/jobs error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
+ res.status(500).json({ error: "Internal server error" });
+ }
+ });
+diff --git a/backend/dist/test-bulk-transactions.js b/backend/dist/test-bulk-transactions.js
+new file mode 100644
+index 0000000..de05b19
+--- /dev/null
++++ b/backend/dist/test-bulk-transactions.js
+@@ -0,0 +1,197 @@
++"use strict";
++var __importDefault = (this && this.__importDefault) || function (mod) {
++ return (mod && mod.__esModule) ? mod : { "default": mod };
++};
++Object.defineProperty(exports, "__esModule", { value: true });
++const express_1 = __importDefault(require("express"));
++const db_1 = require("./config/db");
++const tracing_1 = require("./utils/tracing");
++const bulk_1 = __importDefault(require("./routes/bulk"));
++const node_crypto_1 = require("node:crypto");
++const app = (0, express_1.default)();
++app.use(express_1.default.json());
++app.use(tracing_1.tracingMiddleware);
++app.use("/api/v1/bulk", bulk_1.default);
++const PORT = 3009;
++const server = app.listen(PORT, async () => {
++ console.log(`\n======================================================`);
++ console.log(`🧪 STARTING AUTOMATED TRANSACTIONAL BULK ROLLBACK TEST`);
++ console.log(`======================================================\n`);
++ try {
++ // 0. Ensure Database connection is active
++ console.log("Checking DB connection...");
++ await db_1.prisma.$queryRaw `SELECT 1`;
++ console.log("DB connection OK.\n");
++ const clientAddress = `GD${(0, node_crypto_1.randomUUID)().replace(/-/g, "").slice(0, 30).toUpperCase()}`;
++ const freelancerAddress = `GD${(0, node_crypto_1.randomUUID)().replace(/-/g, "").slice(0, 30).toUpperCase()}`;
++ // Test 1: Successful Bulk Job Creation
++ console.log("------------------------------------------------------");
++ console.log("TEST 1: Successful Bulk Job Creation (Atomic Commit)");
++ console.log("------------------------------------------------------");
++ const validJobsPayload = {
++ jobs: [
++ {
++ title: "Verify Soroban Bridge Performance",
++ description: "Measure lock/unlock times under load",
++ budget_usdc: 5000,
++ milestones: 2,
++ client_address: clientAddress,
++ },
++ {
++ title: "Audit Reputation scoring dynamic thresholds",
++ description: "Run statistical verification across 100 historical profiles",
++ budget_usdc: 15000,
++ milestones: 3,
++ client_address: clientAddress,
++ }
++ ]
++ };
++ const res1 = await fetch(`http://127.0.0.1:${PORT}/api/v1/bulk/jobs`, {
++ method: "POST",
++ headers: { "Content-Type": "application/json" },
++ body: JSON.stringify(validJobsPayload),
++ });
++ const body1 = await res1.json();
++ console.log(`Response Status: ${res1.status}`);
++ console.log(`Response Success: ${body1.success}`);
++ if (res1.status === 201) {
++ console.log(`Created jobs count: ${body1.jobs.length}`);
++ console.log(`Job 1 Title: ${body1.jobs[0].title} (${body1.jobs[0].milestones.length} milestones)`);
++ console.log(`Job 2 Title: ${body1.jobs[1].title} (${body1.jobs[1].milestones.length} milestones)`);
++ console.log("✅ TEST 1 PASSED: Atomic commit succeeded!");
++ }
++ else {
++ throw new Error(`TEST 1 FAILED: Unexpected status code: ${res1.status}`);
++ }
++ // Test 2: Bulk Job Creation Rollback on Validation Failure
++ console.log("\n------------------------------------------------------");
++ console.log("TEST 2: Bulk Job Creation Rollback on Zod Error");
++ console.log("------------------------------------------------------");
++ // Capture initial job count
++ const initialJobsCount = await db_1.prisma.jobs.count();
++ const invalidJobsPayload = {
++ jobs: [
++ {
++ title: "This job has valid configurations",
++ description: "Should not be persisted if transaction rolls back",
++ budget_usdc: 2000,
++ milestones: 1,
++ client_address: clientAddress,
++ },
++ {
++ title: "This job has an INVALID negative budget",
++ description: "Will trigger validation failure and abort the transaction",
++ budget_usdc: -500, // Invalid: must be positive
++ milestones: 1,
++ client_address: clientAddress,
++ }
++ ]
++ };
++ const res2 = await fetch(`http://127.0.0.1:${PORT}/api/v1/bulk/jobs`, {
++ method: "POST",
++ headers: { "Content-Type": "application/json" },
++ body: JSON.stringify(invalidJobsPayload),
++ });
++ const body2 = await res2.json();
++ console.log(`Response Status: ${res2.status} (Expected: 400)`);
++ console.log(`Response Success: ${body2.success} (Expected: false)`);
++ // Verify that NO jobs were written to the database (atomic rollback!)
++ const finalJobsCount = await db_1.prisma.jobs.count();
++ console.log(`Initial jobs count: ${initialJobsCount}`);
++ console.log(`Final jobs count: ${finalJobsCount}`);
++ if (initialJobsCount === finalJobsCount) {
++ console.log("🛡️ VERIFIED: The first valid job was NOT created. Transaction rolled back completely!");
++ console.log("✅ TEST 2 PASSED: Rollback verified!");
++ }
++ else {
++ throw new Error("❌ TEST 2 FAILED: A job was persisted despite transaction failure!");
++ }
++ // Test 3: Bulk Milestone Release & Rollback Safety
++ console.log("\n------------------------------------------------------");
++ console.log("TEST 3: Bulk Milestone Release Rollback on Missing Deliverable");
++ console.log("------------------------------------------------------");
++ // 1. Create a job manually inside DB to test release
++ const testJob = await db_1.prisma.jobs.create({
++ data: {
++ title: "Milestone Release Rollback Test Job",
++ budget_usdc: BigInt(1000),
++ milestones: 2,
++ client_address: clientAddress,
++ freelancer_address: freelancerAddress,
++ status: "funded",
++ }
++ });
++ const milestone1 = await db_1.prisma.milestones.create({
++ data: {
++ job_id: testJob.id,
++ index: 1,
++ title: "Milestone 1",
++ amount_usdc: BigInt(500),
++ status: "pending",
++ }
++ });
++ const milestone2 = await db_1.prisma.milestones.create({
++ data: {
++ job_id: testJob.id,
++ index: 2,
++ title: "Milestone 2",
++ amount_usdc: BigInt(500),
++ status: "pending",
++ }
++ });
++ // 2. Submit a deliverable ONLY for milestone 1
++ await db_1.prisma.deliverables.create({
++ data: {
++ job_id: testJob.id,
++ milestone_index: 1,
++ submitted_by: freelancerAddress,
++ label: "Deliverable 1 link",
++ url: "https://github.com/dxmakers/lance",
++ }
++ });
++ // Try to bulk-release both Milestone 1 AND Milestone 2.
++ // Since Milestone 2 has no deliverable submitted, this request MUST fail,
++ // and Milestone 1 must NOT be released (rolled back atomically!).
++ const releasePayload = {
++ releases: [
++ { jobId: testJob.id, milestoneId: milestone1.id },
++ { jobId: testJob.id, milestoneId: milestone2.id } // This one has no deliverable, will fail!
++ ]
++ };
++ const res3 = await fetch(`http://127.0.0.1:${PORT}/api/v1/bulk/milestones/release`, {
++ method: "POST",
++ headers: { "Content-Type": "application/json" },
++ body: JSON.stringify(releasePayload),
++ });
++ const body3 = await res3.json();
++ console.log(`Response Status: ${res3.status} (Expected: 500)`);
++ console.log(`Error detail: ${body3.details}`);
++ // Verify that Milestone 1 status is STILL 'pending' (fully rolled back!)
++ const dbMilestone1 = await db_1.prisma.milestones.findUnique({ where: { id: milestone1.id } });
++ const dbMilestone2 = await db_1.prisma.milestones.findUnique({ where: { id: milestone2.id } });
++ console.log(`Milestone 1 Status in DB: ${dbMilestone1?.status} (Expected: pending)`);
++ console.log(`Milestone 2 Status in DB: ${dbMilestone2?.status} (Expected: pending)`);
++ if (dbMilestone1?.status === "pending" && dbMilestone2?.status === "pending") {
++ console.log("🛡️ VERIFIED: Both milestone statuses remained 'pending'. Transaction completely rolled back!");
++ console.log("✅ TEST 3 PASSED: Rollback on failed bulk actions verified!");
++ }
++ else {
++ throw new Error("❌ TEST 3 FAILED: Milestone 1 was released despite transaction rollback!");
++ }
++ console.log("\n======================================================");
++ console.log("🎉 ALL TESTS PASSED SUCCESSFULLY!");
++ console.log("======================================================\n");
++ cleanupAndExit(0);
++ }
++ catch (err) {
++ console.error("\n❌ TESTS FAILED WITH EXCEPTION:\n", err);
++ cleanupAndExit(1);
++ }
++});
++function cleanupAndExit(code) {
++ server.close(() => {
++ db_1.pool.end().then(() => {
++ process.exit(code);
++ });
++ });
++}
+diff --git a/backend/dist/utils/tracing.js b/backend/dist/utils/tracing.js
+new file mode 100644
+index 0000000..43c3071
+--- /dev/null
++++ b/backend/dist/utils/tracing.js
+@@ -0,0 +1,226 @@
++"use strict";
++Object.defineProperty(exports, "__esModule", { value: true });
++exports.logger = exports.traceStorage = void 0;
++exports.sanitizeHeaders = sanitizeHeaders;
++exports.sanitizeMeta = sanitizeMeta;
++exports.getTraceContext = getTraceContext;
++exports.tracingMiddleware = tracingMiddleware;
++const node_async_hooks_1 = require("node:async_hooks");
++const node_crypto_1 = require("node:crypto");
++// ---------------------------------------------------------------------------
++// Sensitive Header Configuration
++// ---------------------------------------------------------------------------
++// Headers whose values must NEVER appear in logs. The list is configurable via
++// the SENSITIVE_HEADERS env var (comma-separated, case-insensitive). Defaults
++// cover the most common secret-carrying headers in web APIs.
++// ---------------------------------------------------------------------------
++const DEFAULT_SENSITIVE_HEADERS = [
++ "authorization",
++ "cookie",
++ "set-cookie",
++ "x-api-key",
++ "x-auth-token",
++ "x-secret",
++ "x-csrf-token",
++ "x-forwarded-authorization",
++ "proxy-authorization",
++ "x-access-token",
++ "x-refresh-token",
++ "x-session-token",
++ "x-judge-authority-secret",
++];
++/**
++ * Build the runtime set of sensitive header names (lowercased) by merging
++ * defaults with any additional entries from `process.env.SENSITIVE_HEADERS`.
++ */
++function buildSensitiveHeaderSet() {
++ const extra = (process.env.SENSITIVE_HEADERS || "")
++ .split(",")
++ .map((h) => h.trim().toLowerCase())
++ .filter(Boolean);
++ return new Set([
++ ...DEFAULT_SENSITIVE_HEADERS.map((h) => h.toLowerCase()),
++ ...extra,
++ ]);
++}
++const sensitiveHeaders = buildSensitiveHeaderSet();
++// ---------------------------------------------------------------------------
++// Header Sanitization Utilities
++// ---------------------------------------------------------------------------
++/** Redaction placeholder used in place of secret values */
++const REDACTED = "[REDACTED]";
++/**
++ * Returns a sanitized copy of the raw headers object. Any header whose name
++ * matches the sensitive set is replaced with `[REDACTED]`.
++ *
++ * Matching is performed case-insensitively against the header name.
++ */
++function sanitizeHeaders(rawHeaders) {
++ const sanitized = {};
++ for (const [key, value] of Object.entries(rawHeaders)) {
++ if (value === undefined)
++ continue;
++ sanitized[key] = sensitiveHeaders.has(key.toLowerCase()) ? REDACTED : value;
++ }
++ return sanitized;
++}
++/**
++ * Deep-sanitize an arbitrary metadata object before it is serialised to logs.
++ * Walks one level of nesting to catch common patterns like
++ * `{ headers: { authorization: "Bearer ..." } }` or
++ * `{ token: "abc123" }`.
++ *
++ * Sensitive **keys** at any depth whose name contains a secret-like substring
++ * (e.g. "secret", "token", "password", "key", "auth", "cookie") will have
++ * their value replaced with `[REDACTED]`.
++ */
++const SENSITIVE_KEY_PATTERN = /secret|password|passwd|token|apikey|api_key|auth|cookie|credential|private/i;
++function sanitizeMeta(meta) {
++ if (meta === null || meta === undefined)
++ return meta;
++ if (typeof meta !== "object")
++ return meta;
++ if (Array.isArray(meta))
++ return meta.map(sanitizeMeta);
++ const cleaned = {};
++ for (const [key, value] of Object.entries(meta)) {
++ // Direct key-name match → redact the entire value
++ if (SENSITIVE_KEY_PATTERN.test(key)) {
++ cleaned[key] = REDACTED;
++ continue;
++ }
++ // If the value is an object (e.g. `headers`) recurse one more level
++ if (value !== null && typeof value === "object" && !Array.isArray(value)) {
++ cleaned[key] = sanitizeMeta(value);
++ continue;
++ }
++ // String values that look like JWTs or Bearer tokens → redact
++ if (typeof value === "string" && isLikelySecret(value)) {
++ cleaned[key] = REDACTED;
++ continue;
++ }
++ cleaned[key] = value;
++ }
++ return cleaned;
++}
++/**
++ * Heuristic check: returns true when a string value looks like it could be a
++ * leaked secret (JWT, Bearer token, long hex string, base64 blob, etc.).
++ */
++function isLikelySecret(value) {
++ // Bearer tokens
++ if (/^Bearer\s+/i.test(value))
++ return true;
++ // JWTs (three dot-separated base64url segments)
++ if (/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(value) && value.length > 40)
++ return true;
++ return false;
++}
++/** Global AsyncLocalStorage for trace correlation */
++exports.traceStorage = new node_async_hooks_1.AsyncLocalStorage();
++/** Helper to get current trace context */
++function getTraceContext() {
++ return exports.traceStorage.getStore();
++}
++// ---------------------------------------------------------------------------
++// Structured Logging Framework
++// ---------------------------------------------------------------------------
++exports.logger = {
++ /**
++ * Format a log message, automatically stripping any sensitive data from
++ * the `meta` payload and from the trace context before serialization.
++ */
++ formatMessage(level, message, meta) {
++ const context = getTraceContext();
++ const timestamp = new Date().toISOString();
++ // Deep-sanitize the metadata *before* it reaches any serialisation path
++ const safeMeta = meta ? sanitizeMeta(meta) : undefined;
++ const logData = {
++ timestamp,
++ level,
++ message,
++ requestId: context?.requestId,
++ userAddress: context?.userAddress,
++ ...sanitizeMeta(context),
++ ...safeMeta,
++ };
++ // Remove duplicates or circular objects if any
++ delete logData.jobs; // prevent deep serialization of DB objects
++ if (process.env.NODE_ENV === "production") {
++ return JSON.stringify(logData);
++ }
++ else {
++ const colorMap = {
++ DEBUG: "\x1b[36m", // Cyan
++ INFO: "\x1b[32m", // Green
++ WARN: "\x1b[33m", // Yellow
++ ERROR: "\x1b[31m", // Red
++ };
++ const reset = "\x1b[0m";
++ const color = colorMap[level] || reset;
++ const reqIdStr = context?.requestId ? ` [reqId:${context.requestId.slice(0, 8)}]` : "";
++ const metaStr = safeMeta && Object.keys(safeMeta).length > 0
++ ? ` | meta: ${JSON.stringify(safeMeta)}`
++ : "";
++ return `${color}[${timestamp}] [${level}]${reqIdStr}: ${message}${metaStr}${reset}`;
++ }
++ },
++ debug(message, meta) {
++ if (process.env.NODE_ENV !== "production" || process.env.LOG_LEVEL === "debug") {
++ console.log(this.formatMessage("DEBUG", message, meta));
++ }
++ },
++ info(message, meta) {
++ console.log(this.formatMessage("INFO", message, meta));
++ },
++ warn(message, meta) {
++ console.warn(this.formatMessage("WARN", message, meta));
++ },
++ error(message, meta) {
++ console.error(this.formatMessage("ERROR", message, meta));
++ },
++};
++// ---------------------------------------------------------------------------
++// Express Tracing Middleware
++// ---------------------------------------------------------------------------
++/**
++ * Express middleware that:
++ * 1. Generates / propagates a unique request ID for distributed tracing.
++ * 2. Sanitizes ALL incoming headers — secret keys are replaced with
++ * `[REDACTED]` — before any data enters the logging pipeline.
++ * 3. Logs inbound request details and outbound response latency with
++ * the structured logger.
++ */
++function tracingMiddleware(req, res, next) {
++ const requestId = req.headers["x-request-id"] || (0, node_crypto_1.randomUUID)();
++ const userAddress = req.headers["x-wallet-address"] || undefined;
++ res.setHeader("x-request-id", requestId);
++ // Build a sanitized snapshot of the request headers for diagnostic logging.
++ // The original `req.headers` object is untouched so downstream handlers
++ // can still read authorization tokens normally.
++ const safeHeaders = sanitizeHeaders(req.headers);
++ const context = {
++ requestId,
++ userAddress,
++ method: req.method,
++ url: req.originalUrl,
++ };
++ exports.traceStorage.run(context, () => {
++ const startTime = process.hrtime();
++ exports.logger.info(`Incoming Request: ${req.method} ${req.originalUrl}`, {
++ ip: req.ip,
++ userAgent: req.headers["user-agent"],
++ headers: safeHeaders,
++ });
++ // Capture response completion to log latency
++ res.on("finish", () => {
++ const duration = process.hrtime(startTime);
++ const durationMs = (duration[0] * 1000 + duration[1] / 1000000).toFixed(2);
++ exports.logger.info(`Request Completed: ${req.method} ${req.originalUrl} - Status ${res.statusCode} in ${durationMs}ms`, {
++ statusCode: res.statusCode,
++ durationMs: parseFloat(durationMs),
++ });
++ });
++ next();
++ });
++}
+diff --git a/backend/dist/utils/transaction.js b/backend/dist/utils/transaction.js
+new file mode 100644
+index 0000000..9f1c190
+--- /dev/null
++++ b/backend/dist/utils/transaction.js
+@@ -0,0 +1,82 @@
++"use strict";
++Object.defineProperty(exports, "__esModule", { value: true });
++exports.runInTransaction = runInTransaction;
++const db_1 = require("../config/db");
++const tracing_1 = require("./tracing");
++/**
++ * Executes operations inside a highly resilient PostgreSQL transaction using Prisma.
++ * Implements auto-rollback on failures and intelligent retry mechanisms for transient errors (deadlocks, serialization failures).
++ * Fully instrumented via the global tracing framework.
++ */
++async function runInTransaction(callback, options = {}) {
++ const isolationLevel = options.isolationLevel || "READ COMMITTED";
++ const maxRetries = options.maxRetries !== undefined ? options.maxRetries : 3;
++ const baseDelayMs = options.baseDelayMs || 100;
++ const context = (0, tracing_1.getTraceContext)();
++ let attempt = 0;
++ while (true) {
++ attempt++;
++ const startTime = process.hrtime();
++ tracing_1.logger.info(`Starting transaction block: Attempt ${attempt}/${maxRetries + 1}`, {
++ isolationLevel,
++ attempt,
++ activeConnections: db_1.pool.totalCount,
++ idleConnections: db_1.pool.idleCount,
++ waitingRequests: db_1.pool.waitingCount,
++ });
++ try {
++ // Execute transaction via Prisma Client
++ const result = await db_1.prisma.$transaction(async (tx) => {
++ // 1. Configure the transaction isolation level for SQL query plans
++ if (isolationLevel !== "READ COMMITTED") {
++ await tx.$executeRawUnsafe(`SET TRANSACTION ISOLATION LEVEL ${isolationLevel}`);
++ tracing_1.logger.debug(`Transaction isolation level elevated to ${isolationLevel}`);
++ }
++ // 2. Execute the caller's business database operations
++ return await callback(tx);
++ }, {
++ timeout: options.timeoutMs || 5000 // default 5 seconds transaction timeout
++ });
++ const duration = process.hrtime(startTime);
++ const durationMs = (duration[0] * 1000 + duration[1] / 1000000).toFixed(2);
++ tracing_1.logger.info(`Transaction successfully committed on attempt ${attempt} in ${durationMs}ms`, {
++ attempts: attempt,
++ durationMs: parseFloat(durationMs),
++ });
++ return result;
++ }
++ catch (error) {
++ const duration = process.hrtime(startTime);
++ const durationMs = (duration[0] * 1000 + duration[1] / 1000000).toFixed(2);
++ // Extract pg error code if present
++ const pgCode = error?.code || error?.meta?.code || error?.originalError?.code;
++ // PostgreSQL transient error codes:
++ // - 40001: serialization_failure (due to concurrent transaction conflicts)
++ // - 40P01: deadlock_detected (due to lock ordering issues under high concurrency)
++ const isTransient = pgCode === "40001" || pgCode === "40P01" ||
++ (error?.message && (error.message.includes("40001") || error.message.includes("40P01") || error.message.includes("deadlock")));
++ if (isTransient && attempt <= maxRetries) {
++ // Calculate exponential backoff with jitter to alleviate concurrency lock contention
++ const delay = Math.min(baseDelayMs * Math.pow(2, attempt) + Math.random() * 50, 1000);
++ tracing_1.logger.warn(`Transient transaction error encountered (code: ${pgCode || "deadlock"}). Rolling back and retrying in ${delay.toFixed(1)}ms. Attempt ${attempt}/${maxRetries}`, {
++ pgCode,
++ attempt,
++ delayMs: delay,
++ error: error.message || error,
++ });
++ // Wait before next attempt
++ await new Promise((resolve) => setTimeout(resolve, delay));
++ continue;
++ }
++ // Permanent error or retries exhausted: log explicit rollback diagnostics and propagate the exception
++ tracing_1.logger.error(`Transaction failed and rolled back on attempt ${attempt} (Duration: ${durationMs}ms). Error: ${error.message || error}`, {
++ pgCode,
++ attempt,
++ isTransient,
++ error: error.message || error,
++ stack: error.stack,
++ });
++ throw error;
++ }
++ }
++}
+diff --git a/backend/migrations/20260429000001_user_address_indexes.sql b/backend/migrations/20260429000001_user_address_indexes.sql
+new file mode 100644
+index 0000000..090e7f5
+--- /dev/null
++++ b/backend/migrations/20260429000001_user_address_indexes.sql
+@@ -0,0 +1,48 @@
++-- Configure PostgreSQL Indexes on Sensitive User Address Mappings
++-- BE-API-085: Optimize queries on address fields for high concurrency and connection pooling
++
++-- Index on profiles.address for fast profile lookups by wallet address
++CREATE INDEX IF NOT EXISTS idx_profiles_address ON profiles(address);
++
++-- Index on saved_jobs.user_address for efficient user-saved job queries with pagination
++CREATE INDEX IF NOT EXISTS idx_saved_jobs_user_address ON saved_jobs(user_address, created_at DESC);
++
++-- Composite index on activity_logs for address-based activity queries with timestamp ordering
++CREATE INDEX IF NOT EXISTS idx_activity_logs_user_address ON activity_logs(user_address, created_at DESC)
++WHERE user_address IS NOT NULL;
++
++-- Index on sessions.address for efficient session lookup and cleanup
++CREATE INDEX IF NOT EXISTS idx_sessions_address_created ON sessions(address, expires_at DESC);
++
++-- Index on arbiters.address for fast arbiter lookups
++CREATE INDEX IF NOT EXISTS idx_arbiters_address_active ON arbiters(address, active);
++
++-- Composite index on jobs for efficient client/freelancer queries with sorting
++CREATE INDEX IF NOT EXISTS idx_jobs_client_address ON jobs(client_address, status, created_at DESC);
++CREATE INDEX IF NOT EXISTS idx_jobs_freelancer_address ON jobs(freelancer_address, status, created_at DESC)
++WHERE freelancer_address IS NOT NULL;
++
++-- Index on bids for efficient freelancer bid queries
++CREATE INDEX IF NOT EXISTS idx_bids_freelancer_address ON bids(freelancer_address, created_at DESC);
++
++-- Index on disputes for efficient dispute tracking by participant
++CREATE INDEX IF NOT EXISTS idx_disputes_opened_by ON disputes(opened_by, created_at DESC);
++
++-- Partial index on transaction_queue for active transactions (excludes completed/failed)
++CREATE INDEX IF NOT EXISTS idx_transaction_queue_active ON transaction_queue(status, scheduled_at)
++WHERE status IN ('queued', 'processing', 'pending');
++
++-- Add constraint for connection pool validation (ensures addresses are non-empty when present)
++ALTER TABLE profiles ADD CONSTRAINT chk_profiles_address_not_empty CHECK (address != '');
++ALTER TABLE saved_jobs ADD CONSTRAINT chk_saved_jobs_user_address_not_empty CHECK (user_address != '');
++
++-- VACUUM ANALYZE to update statistics after index creation
++VACUUM ANALYZE profiles;
++VACUUM ANALYZE saved_jobs;
++VACUUM ANALYZE activity_logs;
++VACUUM ANALYZE sessions;
++VACUUM ANALYZE arbiters;
++VACUUM ANALYZE jobs;
++VACUUM ANALYZE bids;
++VACUUM ANALYZE disputes;
++VACUUM ANALYZE transaction_queue;
+diff --git a/backend/migrations/20260527000001_job_bulletin_pagination_indexes.sql b/backend/migrations/20260527000001_job_bulletin_pagination_indexes.sql
+new file mode 100644
+index 0000000..0a26c9d
+--- /dev/null
++++ b/backend/migrations/20260527000001_job_bulletin_pagination_indexes.sql
+@@ -0,0 +1,18 @@
++-- Adds optional bulletin search fields and indexes for cursor-paginated job listings.
++-- Existing jobs remain queryable because both columns are nullable/defaulted.
++ALTER TABLE jobs
++ ADD COLUMN IF NOT EXISTS skills TEXT[] NOT NULL DEFAULT '{}',
++ ADD COLUMN IF NOT EXISTS deadline_at TIMESTAMPTZ;
++
++CREATE INDEX IF NOT EXISTS idx_jobs_created_id_desc
++ ON jobs (created_at DESC, id DESC);
++
++CREATE INDEX IF NOT EXISTS idx_jobs_budget_created_id_desc
++ ON jobs (budget_usdc, created_at DESC, id DESC);
++
++CREATE INDEX IF NOT EXISTS idx_jobs_deadline_at
++ ON jobs (deadline_at)
++ WHERE deadline_at IS NOT NULL;
++
++CREATE INDEX IF NOT EXISTS idx_jobs_skills_gin
++ ON jobs USING GIN (skills);
+diff --git a/backend/migrations/20260527000001_performance_indexes.sql b/backend/migrations/20260527000001_performance_indexes.sql
+new file mode 100644
+index 0000000..47632e5
+--- /dev/null
++++ b/backend/migrations/20260527000001_performance_indexes.sql
+@@ -0,0 +1,14 @@
++-- Add high-concurrency database indexes to eliminate table scans and prevent lock contention
++
++-- 1. Indexes on jobs table
++CREATE INDEX IF NOT EXISTS idx_jobs_client_address ON jobs(client_address);
++CREATE INDEX IF NOT EXISTS idx_jobs_freelancer_address ON jobs(freelancer_address);
++CREATE INDEX IF NOT EXISTS idx_jobs_status ON jobs(status);
++
++-- 2. Indexes on bids table
++CREATE INDEX IF NOT EXISTS idx_bids_freelancer_address ON bids(freelancer_address);
++CREATE INDEX IF NOT EXISTS idx_bids_job_id ON bids(job_id);
++
++-- 3. Indexes on activity_logs table
++CREATE INDEX IF NOT EXISTS idx_activity_logs_user_address ON activity_logs(user_address);
++CREATE INDEX IF NOT EXISTS idx_activity_logs_job_id ON activity_logs(job_id);
+diff --git a/backend/migrations/20260527000002_write_recovery_records.sql b/backend/migrations/20260527000002_write_recovery_records.sql
+new file mode 100644
+index 0000000..1ea9d83
+--- /dev/null
++++ b/backend/migrations/20260527000002_write_recovery_records.sql
+@@ -0,0 +1,28 @@
++-- Durable ledger for database writes that may be interrupted after the request is accepted.
++-- A pending/failed row gives operators and retry workers a stable idempotency key to inspect.
++CREATE TABLE IF NOT EXISTS write_recovery_records (
++ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
++ idempotency_key TEXT NOT NULL UNIQUE,
++ operation TEXT NOT NULL,
++ entity_type TEXT NOT NULL,
++ entity_id UUID,
++ status TEXT NOT NULL DEFAULT 'pending',
++ attempts INT NOT NULL DEFAULT 0,
++ last_error TEXT,
++ recovery_payload JSONB NOT NULL DEFAULT '{}'::jsonb,
++ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
++ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
++ CONSTRAINT write_recovery_status_check
++ CHECK (status IN ('pending', 'committed', 'failed', 'abandoned'))
++);
++
++CREATE INDEX IF NOT EXISTS idx_write_recovery_status_updated
++ ON write_recovery_records (status, updated_at DESC, id DESC);
++
++CREATE INDEX IF NOT EXISTS idx_write_recovery_entity
++ ON write_recovery_records (entity_type, entity_id)
++ WHERE entity_id IS NOT NULL;
++
++CREATE TRIGGER write_recovery_records_updated_at
++ BEFORE UPDATE ON write_recovery_records
++ FOR EACH ROW EXECUTE FUNCTION set_updated_at();
+diff --git a/backend/package-lock.json b/backend/package-lock.json
+index 9e5ac2b..df75af7 100644
+--- a/backend/package-lock.json
++++ b/backend/package-lock.json
+@@ -54,8 +54,7 @@
+ "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.4.1.tgz",
+ "integrity": "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==",
+ "devOptional": true,
+- "license": "Apache-2.0",
+- "peer": true
++ "license": "Apache-2.0"
+ },
+ "node_modules/@electric-sql/pglite-socket": {
+ "version": "0.1.1",
+@@ -799,7 +798,6 @@
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz",
+ "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==",
+ "license": "MIT",
+- "peer": true,
+ "dependencies": {
+ "undici-types": ">=7.24.0 <7.24.7"
+ }
+@@ -1477,7 +1475,8 @@
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "devOptional": true,
+- "license": "MIT"
++ "license": "MIT",
++ "peer": true
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+@@ -2185,7 +2184,6 @@
+ "integrity": "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==",
+ "devOptional": true,
+ "license": "MIT",
+- "peer": true,
+ "engines": {
+ "node": ">=16.9.0"
+ }
+@@ -2933,7 +2931,6 @@
+ "resolved": "https://registry.npmjs.org/pg/-/pg-8.21.0.tgz",
+ "integrity": "sha512-AUP1EYJuHraQGsVoCQVIcM7TEJVGtDzxWtGFZd8rds9d+CCXlU5Js1rYgfLNvxy9iJrpHjGrRjoi/3BT9fRyiA==",
+ "license": "MIT",
+- "peer": true,
+ "dependencies": {
+ "pg-connection-string": "^2.13.0",
+ "pg-pool": "^3.14.0",
+@@ -3121,7 +3118,6 @@
+ "devOptional": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+- "peer": true,
+ "dependencies": {
+ "@prisma/config": "7.8.0",
+ "@prisma/dev": "0.24.3",
+@@ -3423,7 +3419,8 @@
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
+ "devOptional": true,
+- "license": "MIT"
++ "license": "MIT",
++ "peer": true
+ },
+ "node_modules/semver": {
+ "version": "7.8.0",
+@@ -3882,7 +3879,6 @@
+ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+- "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma
+index cee1686..21a66ef 100644
+--- a/backend/prisma/schema.prisma
++++ b/backend/prisma/schema.prisma
+@@ -30,6 +30,8 @@ model activity_logs {
+ jobs jobs? @relation(fields: [job_id], references: [id], onUpdate: NoAction)
+
+ @@index([created_at(sort: Desc)], map: "activity_logs_created_idx")
++ @@index([user_address], map: "idx_activity_logs_user_address")
++ @@index([job_id], map: "idx_activity_logs_job_id")
+ }
+
+ model appeals {
+@@ -90,6 +92,9 @@ model bids {
+ updated_at DateTime? @default(now()) @db.Timestamptz(6)
+ bid_status_transitions bid_status_transitions[]
+ jobs jobs @relation(fields: [job_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
++
++ @@index([freelancer_address], map: "idx_bids_freelancer_address")
++ @@index([job_id], map: "idx_bids_job_id")
+ }
+
+ model deliverables {
+@@ -194,6 +199,8 @@ model jobs {
+ status String @default("open")
+ metadata_hash String?
+ on_chain_job_id BigInt?
++ skills String[] @default([])
++ deadline_at DateTime? @db.Timestamptz(6)
+ created_at DateTime @default(now()) @db.Timestamptz(6)
+ updated_at DateTime @default(now()) @db.Timestamptz(6)
+ activity_logs activity_logs[]
+@@ -203,6 +210,10 @@ model jobs {
+ milestone_events milestone_events[]
+ milestone_records milestones[]
+ saved_jobs saved_jobs[]
++
++ @@index([client_address], map: "idx_jobs_client_address")
++ @@index([freelancer_address], map: "idx_jobs_freelancer_address")
++ @@index([status], map: "idx_jobs_status")
+ }
+
+ model milestone_events {
+diff --git a/backend/src/config/db.ts b/backend/src/config/db.ts
+index 8bf9c32..2d75277 100644
+--- a/backend/src/config/db.ts
++++ b/backend/src/config/db.ts
+@@ -1,21 +1,269 @@
+ import { PrismaClient } from "@prisma/client";
+-import { Pool } from "pg";
++import { Pool, PoolClient } from "pg";
+ import { PrismaPg } from "@prisma/adapter-pg";
+ import dotenv from "dotenv";
++import { trace } from "./tracing";
+
+ dotenv.config();
+
+ const connectionString = process.env.DATABASE_URL;
+-const pool = new Pool({ connectionString });
++
++// ---------------------------------------------------------------------------
++// Pool configuration — tuneable via environment variables
++// ---------------------------------------------------------------------------
++const POOL_MAX = parseInt(process.env.POOL_MAX_CONNECTIONS || "20", 10);
++const POOL_MIN = parseInt(process.env.POOL_MIN_CONNECTIONS || "2", 10);
++const POOL_IDLE_TIMEOUT_MS = parseInt(process.env.POOL_IDLE_TIMEOUT_MS || "30000", 10);
++const POOL_CONNECTION_TIMEOUT_MS = parseInt(process.env.POOL_CONNECTION_TIMEOUT_MS || "5000", 10);
++const POOL_HEALTH_CHECK_INTERVAL_MS = parseInt(process.env.POOL_HEALTH_CHECK_INTERVAL_MS || "30000", 10);
++const POOL_CONNECT_RETRY_LIMIT = parseInt(process.env.POOL_CONNECT_RETRY_LIMIT || "3", 10);
++const POOL_CONNECT_RETRY_BASE_DELAY_MS = parseInt(process.env.POOL_CONNECT_RETRY_BASE_DELAY_MS || "500", 10);
++
++// ---------------------------------------------------------------------------
++// Build the pool with resilient options
++// ---------------------------------------------------------------------------
++export const pool = new Pool({
++ connectionString,
++ max: POOL_MAX,
++ min: POOL_MIN,
++ idleTimeoutMillis: POOL_IDLE_TIMEOUT_MS,
++ connectionTimeoutMillis: POOL_CONNECTION_TIMEOUT_MS,
++ allowExitOnIdle: false, // Keep the pool alive even when the event loop has no other work
++});
++
++// ---------------------------------------------------------------------------
++// Pool event listeners — structured logging for diagnostics
++// ---------------------------------------------------------------------------
++pool.on("connect", (client: PoolClient) => {
++ client
++ .query("SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED")
++ .catch((err) => {
++ console.error("[POOL] Failed to configure transaction isolation:", err.message);
++ });
++
++ if (process.env.NODE_ENV !== "production") {
++ console.log(
++ `[POOL] New client connected | total=${pool.totalCount} idle=${pool.idleCount} waiting=${pool.waitingCount}`
++ );
++ }
++});
++
++pool.on("acquire", () => {
++ if (process.env.NODE_ENV !== "production") {
++ console.log(
++ `[POOL] Client acquired | total=${pool.totalCount} idle=${pool.idleCount} waiting=${pool.waitingCount}`
++ );
++ }
++});
++
++pool.on("remove", () => {
++ if (process.env.NODE_ENV !== "production") {
++ console.log(
++ `[POOL] Client removed | total=${pool.totalCount} idle=${pool.idleCount} waiting=${pool.waitingCount}`
++ );
++ }
++});
++
++pool.on("error", (err: Error) => {
++ console.error("[POOL] Unexpected pool error:", err.message);
++});
++
++// ---------------------------------------------------------------------------
++// Pool health statistics — exposed for the /api/v1/pool/health endpoint
++// ---------------------------------------------------------------------------
++export interface PoolHealthStats {
++ totalConnections: number;
++ idleConnections: number;
++ activeConnections: number;
++ waitingRequests: number;
++ maxConnections: number;
++ minConnections: number;
++ idleTimeoutMs: number;
++ connectionTimeoutMs: number;
++ healthCheckIntervalMs: number;
++ lastHealthCheckAt: string | null;
++ lastHealthCheckOk: boolean;
++ uptimeSeconds: number;
++ healthChecksPassed: number;
++ healthChecksFailed: number;
++}
++
++let lastHealthCheckAt: Date | null = null;
++let lastHealthCheckOk = true;
++let healthChecksPassed = 0;
++let healthChecksFailed = 0;
++const poolStartedAt = Date.now();
++
++export function getPoolHealthStats(): PoolHealthStats {
++ return {
++ totalConnections: pool.totalCount,
++ idleConnections: pool.idleCount,
++ activeConnections: pool.totalCount - pool.idleCount,
++ waitingRequests: pool.waitingCount,
++ maxConnections: POOL_MAX,
++ minConnections: POOL_MIN,
++ idleTimeoutMs: POOL_IDLE_TIMEOUT_MS,
++ connectionTimeoutMs: POOL_CONNECTION_TIMEOUT_MS,
++ healthCheckIntervalMs: POOL_HEALTH_CHECK_INTERVAL_MS,
++ lastHealthCheckAt: lastHealthCheckAt ? lastHealthCheckAt.toISOString() : null,
++ lastHealthCheckOk,
++ uptimeSeconds: Math.floor((Date.now() - poolStartedAt) / 1000),
++ healthChecksPassed,
++ healthChecksFailed,
++ };
++}
++
++// ---------------------------------------------------------------------------
++// Background health-check — validates an idle connection periodically
++// ---------------------------------------------------------------------------
++let healthCheckTimer: ReturnType | null = null;
++
++async function runPoolHealthCheck(): Promise {
++ let client: PoolClient | undefined;
++ try {
++ client = await pool.connect();
++ await client.query("SELECT 1");
++ lastHealthCheckOk = true;
++ healthChecksPassed++;
++ } catch (err: any) {
++ lastHealthCheckOk = false;
++ healthChecksFailed++;
++ console.error("[POOL HEALTH] Background health-check failed:", err.message);
++ } finally {
++ lastHealthCheckAt = new Date();
++ if (client) {
++ client.release();
++ }
++ }
++}
++
++export function startPoolHealthCheck(): void {
++ if (healthCheckTimer) return; // already running
++ // Run once immediately then on an interval
++ runPoolHealthCheck();
++ healthCheckTimer = setInterval(runPoolHealthCheck, POOL_HEALTH_CHECK_INTERVAL_MS);
++ // Allow the process to exit even if the timer is still active
++ if (healthCheckTimer && typeof healthCheckTimer === "object" && "unref" in healthCheckTimer) {
++ healthCheckTimer.unref();
++ }
++ console.log(
++ `[POOL HEALTH] Background health-check started (interval: ${POOL_HEALTH_CHECK_INTERVAL_MS}ms)`
++ );
++}
++
++export function stopPoolHealthCheck(): void {
++ if (healthCheckTimer) {
++ clearInterval(healthCheckTimer);
++ healthCheckTimer = null;
++ }
++}
++
++// ---------------------------------------------------------------------------
++// connectWithRetry — Wraps initial connection with exponential backoff so the
++// API doesn't crash on cold-start if the database is momentarily unavailable.
++// ---------------------------------------------------------------------------
++export async function connectWithRetry(): Promise {
++ for (let attempt = 1; attempt <= POOL_CONNECT_RETRY_LIMIT; attempt++) {
++ try {
++ const client = await pool.connect();
++ await client.query("SELECT 1");
++ client.release();
++ console.log(`[POOL] Database connected successfully on attempt ${attempt}`);
++ return;
++ } catch (err: any) {
++ const delay = Math.min(
++ POOL_CONNECT_RETRY_BASE_DELAY_MS * Math.pow(2, attempt - 1) + Math.random() * 100,
++ 5000
++ );
++ console.error(
++ `[POOL] Connection attempt ${attempt}/${POOL_CONNECT_RETRY_LIMIT} failed: ${err.message}. ` +
++ `Retrying in ${delay.toFixed(0)}ms...`
++ );
++ if (attempt === POOL_CONNECT_RETRY_LIMIT) {
++ throw new Error(
++ `Failed to connect to the database after ${POOL_CONNECT_RETRY_LIMIT} attempts: ${err.message}`
++ );
++ }
++ await new Promise((resolve) => setTimeout(resolve, delay));
++ }
++ }
++}
++
++// ---------------------------------------------------------------------------
++// Prisma Client with the pg pool adapter
++// ---------------------------------------------------------------------------
+ const adapter = new PrismaPg(pool);
+
+-const globalForPrisma = global as unknown as { prisma: PrismaClient };
++const globalForPrisma = global as unknown as { prisma: ReturnType };
+
+-export const prisma =
+- globalForPrisma.prisma ||
+- new PrismaClient({
++function createPrismaClient() {
++ const client = new PrismaClient({
+ adapter,
+ log: process.env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"],
+ });
+
++ return client.$extends({
++ query: {
++ $allModels: {
++ async $allOperations({ model, operation, args, query }) {
++ const startTime = Date.now();
++ const logger = trace.getLogger("db-query");
++
++ try {
++ const result = await query(args);
++ const duration = Date.now() - startTime;
++
++ if (duration > 1000) {
++ logger.warn(`Slow query detected: ${model}.${operation}`, {
++ duration,
++ model,
++ action: operation,
++ args: JSON.stringify(args).substring(0, 200),
++ });
++ }
++
++ logger.debug(`Query completed: ${model}.${operation}`, {
++ duration,
++ model,
++ action: operation,
++ });
++
++ return result;
++ } catch (error) {
++ const duration = Date.now() - startTime;
++ logger.error(`Query failed: ${model}.${operation}`, {
++ duration,
++ model,
++ action: operation,
++ error: error instanceof Error ? error.message : String(error),
++ });
++ throw error;
++ }
++ },
++ },
++ },
++ });
++}
++
++export const prisma = globalForPrisma.prisma || createPrismaClient();
++
+ if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
++
++// ---------------------------------------------------------------------------
++// Graceful shutdown — release pool connections on process exit signals
++// ---------------------------------------------------------------------------
++async function gracefulShutdown(signal: string): Promise {
++ console.log(`[POOL] Received ${signal}. Draining connection pool...`);
++ stopPoolHealthCheck();
++ try {
++ await prisma.$disconnect();
++ await pool.end();
++ console.log("[POOL] Connection pool drained successfully.");
++ } catch (err: any) {
++ console.error("[POOL] Error during pool shutdown:", err.message);
++ }
++ process.exit(0);
++}
++
++process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
++process.on("SIGINT", () => gracefulShutdown("SIGINT"));
+diff --git a/backend/src/config/tracing.ts b/backend/src/config/tracing.ts
+new file mode 100644
+index 0000000..6963d4d
+--- /dev/null
++++ b/backend/src/config/tracing.ts
+@@ -0,0 +1,99 @@
++// Tracing and logging instrumentation for diagnostic visibility
++// Provides structured logging context for all backend operations
++
++interface LogEntry {
++ timestamp: string;
++ level: string;
++ message: string;
++ context?: Record;
++ [key: string]: any;
++}
++
++interface Logger {
++ debug(message: string, context?: Record): void;
++ info(message: string, context?: Record): void;
++ warn(message: string, context?: Record): void;
++ error(message: string, context?: Record): void;
++}
++
++class TraceLogger implements Logger {
++ private name: string;
++
++ constructor(name: string) {
++ this.name = name;
++ }
++
++ private log(level: string, message: string, context?: Record) {
++ const entry: LogEntry = {
++ timestamp: new Date().toISOString(),
++ level,
++ message,
++ logger: this.name,
++ ...context,
++ };
++
++ if (process.env.LOG_FORMAT === "json") {
++ console.log(JSON.stringify(entry));
++ } else {
++ const contextStr = context ? ` ${JSON.stringify(context)}` : "";
++ console.log(`[${entry.timestamp}] [${level}] [${this.name}] ${message}${contextStr}`);
++ }
++ }
++
++ debug(message: string, context?: Record) {
++ if (process.env.LOG_LEVEL === "debug" || process.env.NODE_ENV === "development") {
++ this.log("DEBUG", message, context);
++ }
++ }
++
++ info(message: string, context?: Record) {
++ this.log("INFO", message, context);
++ }
++
++ warn(message: string, context?: Record) {
++ this.log("WARN", message, context);
++ }
++
++ error(message: string, context?: Record) {
++ this.log("ERROR", message, context);
++ }
++}
++
++class TraceContext {
++ private contextMap: Map = new Map();
++
++ active(): Record {
++ return Object.fromEntries(this.contextMap);
++ }
++
++ set(key: string, value: any) {
++ this.contextMap.set(key, value);
++ }
++
++ get(key: string) {
++ return this.contextMap.get(key);
++ }
++
++ clear() {
++ this.contextMap.clear();
++ }
++}
++
++class Trace {
++ private loggers: Map = new Map();
++ private readonly context: TraceContext = new TraceContext();
++
++ getLogger(name: string): Logger {
++ if (!this.loggers.has(name)) {
++ this.loggers.set(name, new TraceLogger(name));
++ }
++ return this.loggers.get(name)!;
++ }
++
++ getContext(): TraceContext {
++ return this.context;
++ }
++}
++
++export const trace = new Trace();
++export const context = trace.getContext();
+diff --git a/backend/src/index.ts b/backend/src/index.ts
+index 30e2f9b..0612756 100644
+--- a/backend/src/index.ts
++++ b/backend/src/index.ts
+@@ -1,7 +1,10 @@
+ import express, { Express, Request, Response } from "express";
+ import cors from "cors";
+ import dotenv from "dotenv";
+-import { prisma } from "./config/db";
++import { prisma, connectWithRetry, startPoolHealthCheck } from "./config/db";
++import { trace } from "./config/tracing";
++import { intakeRateLimit } from "./middleware/intakeRateLimit";
++import { tracingMiddleware } from "./utils/tracing";
+ import authRoutes from "./routes/auth";
+ import jobsRoutes from "./routes/jobs";
+ import disputesRoutes from "./routes/disputes";
+@@ -9,15 +12,43 @@ import appealsRoutes from "./routes/appeals";
+ import usersRoutes from "./routes/users";
+ import activityRoutes from "./routes/activity";
+ import uploadsRoutes from "./routes/uploads";
++import bulkRoutes from "./routes/bulk";
++import poolRoutes from "./routes/pool";
++import stateRoutes from "./routes/state";
+
+ dotenv.config();
+
+ const app: Express = express();
+ const port = process.env.PORT || 3001;
++const logger = trace.getLogger("server");
+
+ // Enable CORS for frontend requests
+ app.use(cors({ origin: "*" }));
+ app.use(express.json());
++app.use(tracingMiddleware); // Global request tracing and diagnostics
++app.use(intakeRateLimit);
++
++// Request logging middleware with tracing
++app.use((req: Request, res: Response, next) => {
++ const startTime = Date.now();
++ const requestLogger = trace.getLogger(`http-${req.method}`);
++
++ res.on("finish", () => {
++ const duration = Date.now() - startTime;
++ const status = res.statusCode;
++ const statusCategory = status < 400 ? "success" : status < 500 ? "client_error" : "server_error";
++
++ requestLogger.info(`${req.method} ${req.path}`, {
++ method: req.method,
++ path: req.path,
++ status,
++ duration,
++ statusCategory,
++ });
++ });
++
++ next();
++});
+
+ // Mount API routes
+ app.use("/api/v1/auth", authRoutes);
+@@ -27,18 +58,78 @@ app.use("/api/v1/appeals", appealsRoutes);
+ app.use("/api/v1/users", usersRoutes);
+ app.use("/api/v1/activity", activityRoutes);
+ app.use("/api/v1/uploads", uploadsRoutes);
++app.use("/api/v1/bulk", bulkRoutes);
++app.use("/api/v1/pool", poolRoutes);
++app.use("/api/v1/state", stateRoutes);
+
+-// Basic healthcheck route
++// Health check endpoint with database connectivity verification
+ app.get("/health", async (req: Request, res: Response) => {
++ const startTime = Date.now();
++ logger.debug("Health check requested");
++
+ try {
+ // Ping DB to ensure it's alive
+ await prisma.$queryRaw`SELECT 1`;
+- res.status(200).json({ status: "ok", db: "connected" });
++ const duration = Date.now() - startTime;
++
++ logger.info("Health check passed", {
++ status: "ok",
++ db: "connected",
++ duration,
++ });
++
++ res.status(200).json({
++ status: "ok",
++ db: "connected",
++ timestamp: new Date().toISOString(),
++ uptime: process.uptime(),
++ });
+ } catch (error) {
+- res.status(503).json({ status: "error", db: "disconnected" });
++ const duration = Date.now() - startTime;
++ logger.error("Health check failed", {
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
++
++ res.status(503).json({
++ status: "error",
++ db: "disconnected",
++ error: error instanceof Error ? error.message : "Unknown error",
++ timestamp: new Date().toISOString(),
++ });
+ }
+ });
+
+-app.listen(port, () => {
+- console.log(`⚡️[server]: Server is running at http://localhost:${port}`);
++// Graceful shutdown handler
++process.on("SIGTERM", async () => {
++ logger.info("SIGTERM received, shutting down gracefully");
++ try {
++ await prisma.$disconnect();
++ logger.info("Database connection closed");
++ process.exit(0);
++ } catch (error) {
++ logger.error("Error during shutdown", {
++ error: error instanceof Error ? error.message : String(error),
++ });
++ process.exit(1);
++ }
+ });
++
++// ---------------------------------------------------------------------------
++// Start the server — validate the DB connection with retry backoff first,
++// then kick off background pool health-checking.
++// ---------------------------------------------------------------------------
++async function bootstrap(): Promise {
++ try {
++ await connectWithRetry();
++ startPoolHealthCheck();
++ app.listen(port, () => {
++ console.log(`⚡️[server]: Server is running at http://localhost:${port}`);
++ });
++ } catch (err: any) {
++ console.error(`❌ Failed to start server: ${err.message}`);
++ process.exit(1);
++ }
++}
++
++bootstrap();
+diff --git a/backend/src/middleware/intakeRateLimit.ts b/backend/src/middleware/intakeRateLimit.ts
+new file mode 100644
+index 0000000..85f48b2
+--- /dev/null
++++ b/backend/src/middleware/intakeRateLimit.ts
+@@ -0,0 +1,127 @@
++import { Request, Response, NextFunction } from "express";
++import { getPoolHealthStats } from "../config/db";
++import { logger } from "../utils/tracing";
++
++interface Bucket {
++ tokens: number;
++ lastMs: number;
++}
++
++const buckets = new Map();
++
++function envInt(key: string, fallback: number): number {
++ const v = process.env[key];
++ if (!v) return fallback;
++ const n = parseInt(v, 10);
++ return Number.isFinite(n) && n > 0 ? n : fallback;
++}
++
++/** Shrink the per-minute quota when the pg pool is under pressure. */
++export function effectiveRpm(): number {
++ const base = envInt("RATE_LIMIT_RPM", 60);
++ const floor = envInt("RATE_LIMIT_MIN_RPM", 15);
++ const stats = getPoolHealthStats();
++ const max = Math.max(stats.maxConnections, 1);
++ const activeRatio = stats.activeConnections / max;
++ const waitPenalty = stats.waitingRequests > 0 ? 0.35 + Math.min(0.35, stats.waitingRequests / 8) : 0;
++ const pressure = Math.min(0.85, activeRatio * 0.45 + waitPenalty);
++ return Math.max(floor, Math.floor(base * (1 - pressure)));
++}
++
++function burstCap(rpm: number): number {
++ const burst = envInt("RATE_LIMIT_BURST", 10);
++ return rpm + burst;
++}
++
++function takeToken(key: string): { ok: true } | { ok: false; retryAfter: number } {
++ const rpm = effectiveRpm();
++ const cap = burstCap(rpm);
++ const refillPerMs = rpm / 60_000;
++ const now = Date.now();
++
++ let bucket = buckets.get(key);
++ if (!bucket) {
++ bucket = { tokens: cap, lastMs: now };
++ buckets.set(key, bucket);
++ }
++
++ const elapsed = now - bucket.lastMs;
++ bucket.tokens = Math.min(cap, bucket.tokens + elapsed * refillPerMs);
++ bucket.lastMs = now;
++
++ if (bucket.tokens < 1) {
++ const retryAfter = Math.max(1, Math.ceil((1 - bucket.tokens) / refillPerMs / 1000));
++ return { ok: false, retryAfter };
++ }
++
++ bucket.tokens -= 1;
++ return { ok: true };
++}
++
++export function clientIp(req: Request): string {
++ const forwarded = req.headers["x-forwarded-for"];
++ if (typeof forwarded === "string" && forwarded.length > 0) {
++ const first = forwarded.split(",")[0]?.trim();
++ if (first) return first;
++ }
++ return req.ip || req.socket.remoteAddress || "127.0.0.1";
++}
++
++/** Unauthenticated write paths that accept external submissions. */
++export function isPublicIntakeRoute(req: Request): boolean {
++ if (req.method !== "POST") return false;
++ const path = req.originalUrl.split("?")[0] ?? req.path;
++
++ if (path.startsWith("/api/v1/auth")) return true;
++ if (path === "/api/v1/jobs" || path === "/api/v1/jobs/") return true;
++ if (/^\/api\/v1\/jobs\/[^/]+\/bids\/?$/.test(path)) return true;
++ if (path.startsWith("/api/v1/uploads")) return true;
++ if (path.startsWith("/api/v1/bulk")) return true;
++
++ return false;
++}
++
++export function intakeRateLimit(req: Request, res: Response, next: NextFunction): void {
++ if (!isPublicIntakeRoute(req)) {
++ next();
++ return;
++ }
++
++ const key = clientIp(req);
++ const result = takeToken(key);
++
++ if (result.ok) {
++ next();
++ return;
++ }
++
++ const rpm = effectiveRpm();
++ logger.warn("Public intake rate limit exceeded", {
++ ip: key,
++ path: req.originalUrl,
++ retryAfterSeconds: result.retryAfter,
++ effectiveRpm: rpm,
++ });
++
++ res.setHeader("Retry-After", String(result.retryAfter));
++ res.status(429).json({
++ error: "rate limit exceeded",
++ retry_after_seconds: result.retryAfter,
++ });
++}
++
++// Drop idle buckets so long-running processes do not grow memory without bound.
++const pruneMs = 10 * 60 * 1000;
++const pruneTimer = setInterval(() => {
++ const cutoff = Date.now() - pruneMs;
++ for (const [key, bucket] of buckets) {
++ if (bucket.lastMs < cutoff) buckets.delete(key);
++ }
++}, 60_000);
++if (typeof pruneTimer === "object" && "unref" in pruneTimer) {
++ pruneTimer.unref();
++}
++
++export function intakeBucketCount(): number {
++ return buckets.size;
++}
+diff --git a/backend/src/routes/bulk.ts b/backend/src/routes/bulk.ts
+new file mode 100644
+index 0000000..62e440d
+--- /dev/null
++++ b/backend/src/routes/bulk.ts
+@@ -0,0 +1,236 @@
++import { Router, Request, Response } from "express";
++import { z } from "zod";
++import { runInTransaction } from "../utils/transaction";
++import { logger } from "../utils/tracing";
++
++const router = Router();
++
++// Validation Schemas
++const singleJobSchema = z.object({
++ title: z.string().min(1, "Title is required"),
++ description: z.string().optional().default(""),
++ budget_usdc: z.number().int().positive("Budget must be greater than zero"),
++ milestones: z.number().int().min(1, "Milestones count must be at least 1"),
++ client_address: z.string().min(1, "Client address is required"),
++});
++
++const bulkJobsSchema = z.object({
++ jobs: z.array(singleJobSchema).min(1, "At least one job is required for bulk creation"),
++});
++
++const singleReleaseSchema = z.object({
++ jobId: z.string().uuid("Invalid jobId UUID format"),
++ milestoneId: z.string().uuid("Invalid milestoneId UUID format"),
++});
++
++const bulkReleaseSchema = z.object({
++ releases: z.array(singleReleaseSchema).min(1, "At least one milestone release request is required"),
++});
++
++/**
++ * POST /api/v1/bulk/jobs
++ * Atomically creates multiple jobs, each with its respective milestones.
++ * If any validation or creation step fails, the ENTIRE batch is rolled back.
++ */
++router.post("/jobs", async (req: Request, res: Response) => {
++ try {
++ // 1. Validate bulk request format
++ const parsed = bulkJobsSchema.parse(req.body);
++ logger.info(`Starting bulk job creation for ${parsed.jobs.length} jobs`);
++
++ // 2. Execute within an atomic repeatable read transaction to guarantee lock isolation
++ const createdJobs = await runInTransaction(async (tx) => {
++ const results = [];
++
++ for (let i = 0; i < parsed.jobs.length; i++) {
++ const data = parsed.jobs[i];
++ logger.debug(`Processing bulk creation for job index ${i}: "${data.title}"`);
++
++ // Create parent Job record
++ const job = await tx.jobs.create({
++ data: {
++ title: data.title,
++ description: data.description,
++ budget_usdc: BigInt(data.budget_usdc),
++ milestones: data.milestones,
++ client_address: data.client_address,
++ status: "open",
++ },
++ });
++
++ // Compute milestone allocations
++ const perMilestone = Math.floor(data.budget_usdc / data.milestones);
++ const remainder = data.budget_usdc % data.milestones;
++
++ const milestoneRecords = Array.from({ length: data.milestones }).map((_, index) => {
++ const amount_usdc = index === data.milestones - 1 ? perMilestone + remainder : perMilestone;
++ return {
++ job_id: job.id,
++ index: index + 1,
++ title: `Milestone ${index + 1} of ${data.milestones}`,
++ amount_usdc: BigInt(amount_usdc),
++ status: "pending",
++ };
++ });
++
++ // Create child Milestone records
++ await tx.milestones.createMany({
++ data: milestoneRecords,
++ });
++
++ // Fetch back milestones for serializable return
++ const dbMilestones = await tx.milestones.findMany({
++ where: { job_id: job.id },
++ orderBy: { index: "asc" },
++ });
++
++ results.push({
++ ...job,
++ budget_usdc: Number(job.budget_usdc),
++ on_chain_job_id: job.on_chain_job_id ? Number(job.on_chain_job_id) : null,
++ milestones: dbMilestones.map((m: any) => ({
++ ...m,
++ amount_usdc: Number(m.amount_usdc),
++ })),
++ });
++ }
++
++ return results;
++ }, { isolationLevel: "REPEATABLE READ" });
++
++ res.status(201).json({
++ success: true,
++ message: `Successfully created ${createdJobs.length} jobs atomically`,
++ jobs: createdJobs,
++ });
++ } catch (error: any) {
++ if (error instanceof z.ZodError) {
++ return res.status(400).json({
++ success: false,
++ error: "Validation failed",
++ issues: error.issues,
++ });
++ }
++
++ logger.error(`Bulk job creation aborted and rolled back. Error: ${error.message || error}`);
++ res.status(500).json({
++ success: false,
++ error: "Transaction rolled back due to error",
++ details: error.message || error,
++ });
++ }
++});
++
++/**
++ * POST /api/v1/bulk/milestones/release
++ * Atomically releases multiple milestones, updates their respective parent jobs,
++ * and records auditing milestone events.
++ * Strictly rolls back if any individual release requirement (e.g. missing deliverable) fails.
++ */
++router.post("/milestones/release", async (req: Request, res: Response) => {
++ try {
++ const parsed = bulkReleaseSchema.parse(req.body);
++ logger.info(`Starting bulk milestone release for ${parsed.releases.length} milestones`);
++
++ const releaseResults = await runInTransaction(async (tx) => {
++ const results = [];
++
++ for (let i = 0; i < parsed.releases.length; i++) {
++ const { jobId, milestoneId } = parsed.releases[i];
++ logger.debug(`Verifying and releasing milestone ID ${milestoneId} for Job ${jobId}`);
++
++ // Find existing milestone
++ const milestone = await tx.milestones.findUnique({
++ where: { id: milestoneId, job_id: jobId },
++ });
++
++ if (!milestone) {
++ throw new Error(`Milestone ID ${milestoneId} was not found under Job ID ${jobId}`);
++ }
++
++ if (milestone.status !== "pending") {
++ throw new Error(`Milestone ID ${milestoneId} cannot be released because its status is '${milestone.status}' (expected 'pending')`);
++ }
++
++ // Verify milestone deliverable is submitted
++ const deliverableExists = await tx.deliverables.findFirst({
++ where: { job_id: jobId, milestone_index: milestone.index },
++ });
++
++ if (!deliverableExists) {
++ throw new Error(`A deliverable must be submitted for Milestone index ${milestone.index} under Job ID ${jobId} before releasing it`);
++ }
++
++ const txHash = `mock-bulk-release-tx-${milestoneId.slice(0, 8)}`;
++
++ // Update Milestone Status
++ const updatedMilestone = await tx.milestones.update({
++ where: { id: milestoneId },
++ data: {
++ status: "released",
++ tx_hash: txHash,
++ released_at: new Date(),
++ completed_at: new Date(),
++ },
++ });
++
++ // Create Milestone Audit Event
++ await tx.milestone_events.create({
++ data: {
++ milestone_id: milestoneId,
++ job_id: jobId,
++ event_type: "released",
++ tx_hash: txHash,
++ note: "Released atomically via bulk operation",
++ },
++ });
++
++ // Recalculate remaining pending milestones
++ const remainingPending = await tx.milestones.count({
++ where: { job_id: jobId, status: "pending" },
++ });
++
++ const nextJobStatus = remainingPending === 0 ? "completed" : "funded";
++
++ // Update Job Status
++ const updatedJob = await tx.jobs.update({
++ where: { id: jobId },
++ data: { status: nextJobStatus },
++ });
++
++ results.push({
++ milestoneId,
++ jobId,
++ status: "released",
++ jobStatus: nextJobStatus,
++ amount_usdc: Number(updatedMilestone.amount_usdc),
++ });
++ }
++
++ return results;
++ }, { isolationLevel: "SERIALIZABLE" }); // Use Serializable isolation to prevent double-release race conditions
++
++ res.status(200).json({
++ success: true,
++ message: `Successfully released ${releaseResults.length} milestones atomically`,
++ releases: releaseResults,
++ });
++ } catch (error: any) {
++ if (error instanceof z.ZodError) {
++ return res.status(400).json({
++ success: false,
++ error: "Validation failed",
++ issues: error.issues,
++ });
++ }
++
++ logger.error(`Bulk milestone release aborted and rolled back. Error: ${error.message || error}`);
++ res.status(500).json({
++ success: false,
++ error: "Transaction rolled back due to error",
++ details: error.message || error,
++ });
++ }
++});
++
++export default router;
+diff --git a/backend/src/routes/diagnostics.ts b/backend/src/routes/diagnostics.ts
+new file mode 100644
+index 0000000..0f92a6c
+--- /dev/null
++++ b/backend/src/routes/diagnostics.ts
+@@ -0,0 +1,90 @@
++import { Router, Request, Response } from "express";
++import { sanitizeHeaders, sanitizeMeta, logger } from "../utils/tracing";
++import { pool } from "../config/db";
++
++const router = Router();
++
++/**
++ * GET /api/v1/diagnostics/request-info
++ *
++ * Returns sanitized request diagnostics for the current request.
++ * Sensitive headers (authorization, cookies, API keys, tokens, etc.)
++ * are automatically redacted so this endpoint is safe to expose to
++ * monitoring dashboards and log aggregators.
++ */
++router.get("/request-info", async (req: Request, res: Response) => {
++ try {
++ const safeHeaders = sanitizeHeaders(
++ req.headers as Record
++ );
++
++ logger.info("Diagnostics: request-info endpoint accessed", {
++ method: req.method,
++ url: req.originalUrl,
++ });
++
++ res.status(200).json({
++ request: {
++ method: req.method,
++ url: req.originalUrl,
++ path: req.path,
++ protocol: req.protocol,
++ ip: req.ip,
++ hostname: req.hostname,
++ headers: safeHeaders,
++ query: req.query,
++ },
++ server: {
++ nodeVersion: process.version,
++ platform: process.platform,
++ uptime: Math.floor(process.uptime()),
++ memoryUsage: {
++ rss: Math.round(process.memoryUsage().rss / 1024 / 1024),
++ heapUsed: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
++ heapTotal: Math.round(process.memoryUsage().heapTotal / 1024 / 1024),
++ external: Math.round(process.memoryUsage().external / 1024 / 1024),
++ },
++ },
++ pool: {
++ totalConnections: pool.totalCount,
++ idleConnections: pool.idleCount,
++ waitingRequests: pool.waitingCount,
++ },
++ });
++ } catch (error: any) {
++ logger.error("Diagnostics: request-info error", { error: error.message });
++ res.status(500).json({ error: "Failed to retrieve diagnostics" });
++ }
++});
++
++/**
++ * POST /api/v1/diagnostics/sanitize-test
++ *
++ * Accepts an arbitrary JSON body and returns the sanitized version.
++ * Useful for verifying that the sanitization rules are correctly
++ * stripping secrets from structured payloads before they reach logs.
++ *
++ * Example request body:
++ * {
++ * "authorization": "Bearer eyJhbG...",
++ * "user": "alice",
++ * "nested": { "password": "s3cret", "data": 42 }
++ * }
++ */
++router.post("/sanitize-test", async (req: Request, res: Response) => {
++ try {
++ const sanitized = sanitizeMeta(req.body);
++
++ logger.debug("Diagnostics: sanitize-test endpoint invoked");
++
++ res.status(200).json({
++ original_keys: Object.keys(req.body || {}),
++ sanitized,
++ });
++ } catch (error: any) {
++ logger.error("Diagnostics: sanitize-test error", { error: error.message });
++ res.status(500).json({ error: "Failed to sanitize payload" });
++ }
++});
++
++export default router;
+diff --git a/backend/src/routes/jobs.ts b/backend/src/routes/jobs.ts
+index 6a8bf59..d8292b8 100644
+--- a/backend/src/routes/jobs.ts
++++ b/backend/src/routes/jobs.ts
+@@ -1,10 +1,11 @@
+ import { Router, Request, Response } from "express";
+-import { prisma } from "../config/db";
++import { pool, prisma } from "../config/db";
+ import { z } from "zod";
+ import bidsRoutes from "./bids";
+ import milestonesRoutes from "./milestones";
+ import deliverablesRoutes from "./deliverables";
+ import jobDisputesRoutes from "./job-disputes";
++import { logger } from "../utils/tracing";
+
+ const router = Router();
+
+@@ -14,6 +15,13 @@ const getJobsQuerySchema = z.object({
+ status: z.string().optional(),
+ tag: z.string().optional(),
+ sort: z.string().optional(),
++ limit: z.coerce.number().int().min(1).max(100).default(25),
++ cursor_created_at: z.coerce.date().optional(),
++ cursor_id: z.string().uuid().optional(),
++ min_budget: z.coerce.number().int().nonnegative().optional(),
++ max_budget: z.coerce.number().int().nonnegative().optional(),
++ skills: z.string().optional(),
++ deadline_before: z.coerce.date().optional(),
+ });
+
+ const createJobSchema = z.object({
+@@ -22,49 +30,121 @@ const createJobSchema = z.object({
+ budget_usdc: z.number().int().positive("budget must be greater than zero"),
+ milestones: z.number().int().min(1, "milestones must be at least 1"),
+ client_address: z.string().min(1),
++ skills: z.array(z.string()).optional().default([]),
++ deadline_at: z.coerce.date().optional(),
+ });
+
+ const markFundedSchema = z.object({
+ client_address: z.string().min(1),
+ });
+
++function serializeJob(row: any) {
++ return {
++ ...row,
++ budget_usdc: Number(row.budget_usdc),
++ on_chain_job_id: row.on_chain_job_id ? Number(row.on_chain_job_id) : null,
++ };
++}
++
+ // GET /api/v1/jobs
+ router.get("/", async (req: Request, res: Response) => {
+ try {
+ const query = getJobsQuerySchema.parse(req.query);
+
+- let whereClause: any = {};
++ if ((query.cursor_created_at && !query.cursor_id) || (!query.cursor_created_at && query.cursor_id)) {
++ return res.status(400).json({
++ error: "cursor_created_at and cursor_id must be provided together",
++ });
++ }
++
++ if (
++ query.min_budget !== undefined &&
++ query.max_budget !== undefined &&
++ query.min_budget > query.max_budget
++ ) {
++ return res.status(400).json({ error: "min_budget cannot be greater than max_budget" });
++ }
++
++ const conditions: string[] = [];
++ const params: any[] = [];
++ const addParam = (value: any): string => {
++ params.push(value);
++ return `$${params.length}`;
++ };
+
+ if (query.query || (query.tag && query.tag !== "all")) {
+ const searchTerm = query.query || query.tag;
+- whereClause.OR = [
+- { title: { contains: searchTerm, mode: "insensitive" } },
+- { description: { contains: searchTerm, mode: "insensitive" } },
+- ];
++ const placeholder = addParam(`%${searchTerm}%`);
++ conditions.push(`(title ILIKE ${placeholder} OR description ILIKE ${placeholder})`);
+ }
+
+ if (query.status) {
+- whereClause.status = query.status;
++ conditions.push(`status = ${addParam(query.status)}`);
+ }
+-
+- let orderByClause: any = { created_at: "desc" };
+- if (query.sort === "budget") {
+- orderByClause = { budget_usdc: "desc" };
++ if (query.min_budget !== undefined) {
++ conditions.push(`budget_usdc >= ${addParam(query.min_budget)}`);
++ }
++ if (query.max_budget !== undefined) {
++ conditions.push(`budget_usdc <= ${addParam(query.max_budget)}`);
++ }
++ if (query.skills) {
++ const skills = query.skills
++ .split(",")
++ .map((skill) => skill.trim())
++ .filter(Boolean);
++ if (skills.length > 0) {
++ conditions.push(`skills && ${addParam(skills)}::text[]`);
++ }
++ }
++ if (query.deadline_before) {
++ conditions.push(`deadline_at <= ${addParam(query.deadline_before)}`);
++ }
++ if (query.cursor_created_at && query.cursor_id) {
++ conditions.push(
++ `(created_at, id) < (${addParam(query.cursor_created_at)}, ${addParam(query.cursor_id)}::uuid)`
++ );
+ }
+
+- const jobs = await prisma.jobs.findMany({
+- where: whereClause,
+- orderBy: orderByClause,
++ const whereSql = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
++ const orderSql =
++ query.sort === "budget"
++ ? "ORDER BY budget_usdc DESC, created_at DESC, id DESC"
++ : "ORDER BY created_at DESC, id DESC";
++ const limitPlaceholder = addParam(query.limit + 1);
++
++ const result = await pool.query(
++ `SELECT id, title, description, budget_usdc, milestones, client_address,
++ freelancer_address, status, metadata_hash, on_chain_job_id, skills, deadline_at,
++ created_at, updated_at
++ FROM jobs
++ ${whereSql}
++ ${orderSql}
++ LIMIT ${limitPlaceholder}`,
++ params
++ );
++
++ const rows = result.rows;
++ const hasNext = rows.length > query.limit;
++ const items = (hasNext ? rows.slice(0, query.limit) : rows).map(serializeJob);
++ const cursorSource = hasNext ? items[items.length - 1] : null;
++
++ logger.info("Paginated jobs queried", {
++ returned: items.length,
++ hasNext,
++ status: query.status || "any",
++ sort: query.sort || "created_at",
+ });
+
+- // Convert BigInt to Number/String for JSON serialization
+- const serializedJobs = jobs.map((job) => ({
+- ...job,
+- budget_usdc: Number(job.budget_usdc),
+- on_chain_job_id: job.on_chain_job_id ? Number(job.on_chain_job_id) : null,
+- }));
+-
+- res.json(serializedJobs);
++ res.json({
++ items,
++ next_cursor: cursorSource
++ ? {
++ created_at: cursorSource.created_at,
++ id: cursorSource.id,
++ }
++ : null,
++ limit: query.limit,
++ });
+ } catch (error) {
+ if (error instanceof z.ZodError) {
+ return res.status(400).json({ error: error.issues });
+@@ -88,6 +168,8 @@ router.post("/", async (req: Request, res: Response) => {
+ milestones: data.milestones,
+ client_address: data.client_address,
+ status: "open",
++ skills: data.skills,
++ deadline_at: data.deadline_at,
+ },
+ });
+
+@@ -259,4 +341,4 @@ router.delete("/:id/save", async (req: Request<{ id: string }>, res: Response) =
+ }
+ });
+
+-export default router;
+\ No newline at end of file
++export default router;
+diff --git a/backend/src/routes/pool.ts b/backend/src/routes/pool.ts
+new file mode 100644
+index 0000000..2f276a6
+--- /dev/null
++++ b/backend/src/routes/pool.ts
+@@ -0,0 +1,129 @@
++import { Router, Request, Response } from "express";
++import { pool, getPoolHealthStats } from "../config/db";
++import { effectiveRpm, intakeBucketCount } from "../middleware/intakeRateLimit";
++import { logger } from "../utils/tracing";
++
++const router = Router();
++
++/**
++ * GET /api/v1/pool/health
++ *
++ * Returns detailed connection pool health statistics including:
++ * - current total / idle / active connection counts
++ * - waiting request queue depth
++ * - configured pool limits and timeouts
++ * - background health-check status and history
++ * - pool uptime
++ *
++ * Responds 200 when the last background health-check passed, 503 otherwise.
++ */
++router.get("/health", async (req: Request, res: Response) => {
++ const startTime = process.hrtime();
++ try {
++ const stats = getPoolHealthStats();
++
++ // Perform a live probe so the caller gets real-time validation
++ let liveProbeOk = false;
++ let liveProbeLatencyMs = 0;
++ try {
++ const probeStart = process.hrtime();
++ const client = await pool.connect();
++ await client.query("SELECT 1");
++ client.release();
++ const probeDuration = process.hrtime(probeStart);
++ liveProbeLatencyMs = parseFloat(
++ (probeDuration[0] * 1000 + probeDuration[1] / 1_000_000).toFixed(2)
++ );
++ liveProbeOk = true;
++ } catch (probeErr: any) {
++ logger.error("Pool live-probe failed", { error: probeErr.message });
++ }
++
++ const duration = process.hrtime(startTime);
++ const totalLatencyMs = parseFloat(
++ (duration[0] * 1000 + duration[1] / 1_000_000).toFixed(2)
++ );
++
++ const healthy = liveProbeOk && stats.lastHealthCheckOk;
++
++ logger.info("Pool health endpoint hit", {
++ healthy,
++ liveProbeOk,
++ liveProbeLatencyMs,
++ ...stats,
++ });
++
++ res.status(healthy ? 200 : 503).json({
++ status: healthy ? "healthy" : "degraded",
++ pool: {
++ totalConnections: stats.totalConnections,
++ idleConnections: stats.idleConnections,
++ activeConnections: stats.activeConnections,
++ waitingRequests: stats.waitingRequests,
++ },
++ config: {
++ maxConnections: stats.maxConnections,
++ minConnections: stats.minConnections,
++ idleTimeoutMs: stats.idleTimeoutMs,
++ connectionTimeoutMs: stats.connectionTimeoutMs,
++ healthCheckIntervalMs: stats.healthCheckIntervalMs,
++ },
++ healthCheck: {
++ lastCheckAt: stats.lastHealthCheckAt,
++ lastCheckOk: stats.lastHealthCheckOk,
++ passed: stats.healthChecksPassed,
++ failed: stats.healthChecksFailed,
++ },
++ liveProbe: {
++ ok: liveProbeOk,
++ latencyMs: liveProbeLatencyMs,
++ },
++ uptimeSeconds: stats.uptimeSeconds,
++ responseTimeMs: totalLatencyMs,
++ });
++ } catch (error: any) {
++ logger.error("Pool health endpoint error", { error: error.message });
++ res.status(500).json({
++ status: "error",
++ error: "Failed to retrieve pool health statistics",
++ });
++ }
++});
++
++/**
++ * GET /api/v1/pool/stats
++ *
++ * Lightweight endpoint returning only numeric pool counters.
++ * Suitable for Prometheus-style scraping or lightweight monitoring.
++ */
++router.get("/stats", async (req: Request, res: Response) => {
++ try {
++ const stats = getPoolHealthStats();
++
++ logger.debug("Pool stats endpoint hit", {
++ total: stats.totalConnections,
++ idle: stats.idleConnections,
++ });
++
++ res.status(200).json({
++ totalConnections: stats.totalConnections,
++ idleConnections: stats.idleConnections,
++ activeConnections: stats.activeConnections,
++ waitingRequests: stats.waitingRequests,
++ maxConnections: stats.maxConnections,
++ minConnections: stats.minConnections,
++ uptimeSeconds: stats.uptimeSeconds,
++ healthChecksPassed: stats.healthChecksPassed,
++ healthChecksFailed: stats.healthChecksFailed,
++ intakeRateLimit: {
++ effectiveRpm: effectiveRpm(),
++ trackedClients: intakeBucketCount(),
++ },
++ });
++ } catch (error: any) {
++ logger.error("Pool stats endpoint error", { error: error.message });
++ res.status(500).json({ error: "Failed to retrieve pool statistics" });
++ }
++});
++
++export default router;
+diff --git a/backend/src/routes/state.ts b/backend/src/routes/state.ts
+new file mode 100644
+index 0000000..8d3e754
+--- /dev/null
++++ b/backend/src/routes/state.ts
+@@ -0,0 +1,57 @@
++import { Router, Request, Response } from "express";
++import { z } from "zod";
++import { pool } from "../config/db";
++import { logger } from "../utils/tracing";
++
++const router = Router();
++
++const recoveryQuerySchema = z.object({
++ status: z.enum(["pending", "committed", "failed", "abandoned"]).optional(),
++ limit: z.coerce.number().int().min(1).max(200).default(50),
++});
++
++/**
++ * GET /api/v1/state/write-recovery
++ *
++ * Lists durable write-recovery rows for interrupted or retryable database
++ * mutations. The query is intentionally bounded and ordered by the indexed
++ * status/updated_at tuple from the migration to avoid table scans under load.
++ */
++router.get("/write-recovery", async (req: Request, res: Response) => {
++ try {
++ const query = recoveryQuerySchema.parse(req.query);
++ const params: Array = [query.limit];
++
++ let sql = `
++ SELECT id, idempotency_key, operation, entity_type, entity_id, status,
++ attempts, last_error, recovery_payload, created_at, updated_at
++ FROM write_recovery_records
++ `;
++
++ if (query.status) {
++ params.unshift(query.status);
++ sql += " WHERE status = $1 ORDER BY updated_at DESC, id DESC LIMIT $2";
++ } else {
++ sql += " ORDER BY updated_at DESC, id DESC LIMIT $1";
++ }
++
++ const result = await pool.query(sql, params);
++
++ logger.info("Write recovery state queried", {
++ status: query.status || "any",
++ limit: query.limit,
++ returned: result.rowCount,
++ });
++
++ res.status(200).json(result.rows);
++ } catch (error: any) {
++ if (error instanceof z.ZodError) {
++ return res.status(400).json({ error: error.issues });
++ }
++
++ logger.error("Write recovery state query failed", { error: error.message });
++ res.status(500).json({ error: "Failed to retrieve write recovery state" });
++ }
++});
++
++export default router;
+diff --git a/backend/src/routes/users.ts b/backend/src/routes/users.ts
+index 7560e08..68b24b6 100644
+--- a/backend/src/routes/users.ts
++++ b/backend/src/routes/users.ts
+@@ -1,8 +1,21 @@
+ import { Router, Request, Response } from "express";
+ import { prisma } from "../config/db";
++import { trace } from "../config/tracing";
+ import { z } from "zod";
+
+ const router = Router();
++const logger = trace.getLogger("users-routes");
++
++// Pagination schema for all address mapping queries
++const paginationSchema = z.object({
++ page: z.string().optional().default("1").transform(v => Math.max(1, parseInt(v, 10) || 1)),
++ limit: z.string().optional().default("50").transform(v => {
++ const parsed = parseInt(v, 10) || 50;
++ return Math.min(Math.max(1, parsed), 100); // Enforce 1-100 limit
++ }),
++});
++
++type PaginationParams = z.infer;
+
+ const updateProfileSchema = z.object({
+ display_name: z.string().optional().nullable(),
+@@ -11,27 +24,63 @@ const updateProfileSchema = z.object({
+ portfolio_links: z.array(z.string()).optional().default([]),
+ });
+
+-// GET /api/v1/users
++// GET /api/v1/users - List all user addresses with pagination
+ router.get("/", async (req: Request, res: Response) => {
++ const startTime = Date.now();
++ logger.debug("GET /users request received", { query: req.query });
++
+ try {
+- const users = await prisma.profiles.findMany({
+- select: { address: true },
+- distinct: ["address"],
+- orderBy: { address: "asc" },
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++
++ logger.info("Fetching paginated user addresses", { page, limit, skip });
++
++ const [users, total] = await Promise.all([
++ prisma.profiles.findMany({
++ select: { address: true },
++ distinct: ["address"],
++ orderBy: { address: "asc" },
++ skip,
++ take: limit,
++ }),
++ prisma.profiles.count(),
++ ]);
++
++ const duration = Date.now() - startTime;
++ logger.info("User addresses fetched successfully", {
++ count: users.length,
++ total,
++ page,
++ limit,
++ duration,
+ });
+
+- res.json(users.map(u => u.address));
++ res.status(200).json({
++ data: users.map(u => u.address),
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
++ });
+ } catch (error) {
+- console.error("GET /users error:", error);
++ const duration = Date.now() - startTime;
++ logger.error("GET /users error", {
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
+ res.status(500).json({ error: "Internal server error" });
+ }
+ });
+
+ // GET /api/v1/users/:address/profile
+ router.get("/:address/profile", async (req: Request<{ address: string }>, res: Response) => {
+- try {
+- const { address } = req.params;
++ const startTime = Date.now();
++ const { address } = req.params;
++ logger.debug("GET /users/:address/profile request", { address });
+
++ try {
+ const profile = await prisma.profiles.findUnique({
+ where: { address },
+ });
+@@ -89,7 +138,15 @@ router.get("/:address/profile", async (req: Request<{ address: string }>, res: R
+
+ const portfolio_links = profile?.portfolio_links ? (profile.portfolio_links as any[]).filter(v => typeof v === "string") : [];
+
+- res.json({
++ const duration = Date.now() - startTime;
++ logger.info("User profile fetched successfully", {
++ address,
++ total_jobs,
++ completed_jobs,
++ duration,
++ });
++
++ res.status(200).json({
+ address,
+ display_name: profile?.display_name || null,
+ headline: profile?.headline || "",
+@@ -100,15 +157,23 @@ router.get("/:address/profile", async (req: Request<{ address: string }>, res: R
+ history,
+ });
+ } catch (error) {
+- console.error("GET /users/:address/profile error:", error);
++ const duration = Date.now() - startTime;
++ logger.error("GET /users/:address/profile error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
+ res.status(500).json({ error: "Internal server error" });
+ }
+ });
+
+ // PUT /api/v1/users/:address/profile
+ router.put("/:address/profile", async (req: Request<{ address: string }>, res: Response) => {
++ const startTime = Date.now();
++ const { address } = req.params;
++ logger.debug("PUT /users/:address/profile request", { address });
++
+ try {
+- const { address } = req.params;
+ const data = updateProfileSchema.parse(req.body);
+
+ const portfolio_links = data.portfolio_links
+@@ -133,32 +198,285 @@ router.put("/:address/profile", async (req: Request<{ address: string }>, res: R
+ },
+ });
+
+- // Re-fetch to return full profile
+- // Note: To match exact Rust functionality, we would redirect to the GET function,
+- // but fetching directly here is cleaner. We will just redirect or return success.
++ const duration = Date.now() - startTime;
++ logger.info("User profile updated successfully", {
++ address,
++ duration,
++ });
++
+ res.status(200).json({ success: true });
+ } catch (error) {
++ const duration = Date.now() - startTime;
+ if (error instanceof z.ZodError) {
++ logger.warn("Profile validation failed", {
++ address,
++ errors: error.issues,
++ duration,
++ });
+ return res.status(400).json({ error: error.issues[0]?.message || "Validation failed" });
+ }
+- console.error("PUT /users/:address/profile error:", error);
++ logger.error("PUT /users/:address/profile error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
+ res.status(500).json({ error: "Internal server error" });
+ }
+ });
+
+-// GET /api/v1/users/:address/saved-jobs
++// GET /api/v1/users/:address/saved-jobs - Get paginated saved jobs for user
+ router.get("/:address/saved-jobs", async (req: Request<{ address: string }>, res: Response) => {
++ const startTime = Date.now();
++ const { address } = req.params;
++
+ try {
+- const { address } = req.params;
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++
++ logger.debug("GET /users/:address/saved-jobs request", { address, page, limit });
++
++ const [savedJobs, total] = await Promise.all([
++ prisma.saved_jobs.findMany({
++ where: { user_address: address },
++ orderBy: { created_at: "desc" },
++ skip,
++ take: limit,
++ }),
++ prisma.saved_jobs.count({ where: { user_address: address } }),
++ ]);
+
+- const savedJobs = await prisma.saved_jobs.findMany({
+- where: { user_address: address },
+- orderBy: { created_at: "desc" },
++ const duration = Date.now() - startTime;
++ logger.info("Saved jobs fetched successfully", {
++ address,
++ count: savedJobs.length,
++ total,
++ page,
++ limit,
++ duration,
+ });
+
+- res.json(savedJobs);
++ res.status(200).json({
++ data: savedJobs,
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
++ });
+ } catch (error) {
+- console.error("GET /users/:address/saved-jobs error:", error);
++ const duration = Date.now() - startTime;
++ logger.error("GET /users/:address/saved-jobs error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
++ res.status(500).json({ error: "Internal server error" });
++ }
++});
++
++// GET /api/v1/users/address-mappings - List all user address mappings with pagination and filtering
++router.get("/address-mappings/list", async (req: Request, res: Response) => {
++ const startTime = Date.now();
++ logger.debug("GET /address-mappings request", { query: req.query });
++
++ try {
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++ const filterType = (req.query.type as string)?.toLowerCase() || "all";
++
++ logger.info("Fetching address mappings", { page, limit, filterType });
++
++ let addressMappings: any[] = [];
++ let total = 0;
++
++ if (filterType === "profiles" || filterType === "all") {
++ const profiles = await prisma.profiles.findMany({
++ select: { address: true, display_name: true, updated_at: true },
++ orderBy: { updated_at: "desc" },
++ skip,
++ take: limit,
++ });
++ const profileCount = await prisma.profiles.count();
++
++ addressMappings = profiles.map(p => ({
++ address: p.address,
++ type: "profile",
++ display_name: p.display_name,
++ updated_at: p.updated_at,
++ }));
++ total = profileCount;
++ } else if (filterType === "sessions") {
++ const sessions = await prisma.sessions.findMany({
++ select: { address: true, expires_at: true },
++ orderBy: { expires_at: "desc" },
++ skip,
++ take: limit,
++ });
++ const sessionCount = await prisma.sessions.count();
++
++ addressMappings = sessions.map(s => ({
++ address: s.address,
++ type: "session",
++ expires_at: s.expires_at,
++ }));
++ total = sessionCount;
++ } else if (filterType === "arbiters") {
++ const arbiters = await prisma.arbiters.findMany({
++ select: { address: true, active: true, created_at: true },
++ orderBy: { created_at: "desc" },
++ skip,
++ take: limit,
++ });
++ const arbiterCount = await prisma.arbiters.count();
++
++ addressMappings = arbiters.map(a => ({
++ address: a.address,
++ type: "arbiter",
++ active: a.active,
++ created_at: a.created_at,
++ }));
++ total = arbiterCount;
++ }
++
++ const duration = Date.now() - startTime;
++ logger.info("Address mappings fetched successfully", {
++ count: addressMappings.length,
++ total,
++ filterType,
++ duration,
++ });
++
++ res.status(200).json({
++ data: addressMappings,
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
++ filter: filterType,
++ });
++ } catch (error) {
++ const duration = Date.now() - startTime;
++ logger.error("GET /address-mappings error", {
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
++ res.status(500).json({ error: "Internal server error" });
++ }
++});
++
++// GET /api/v1/users/:address/activity - Get paginated activity log for user address
++router.get("/:address/activity", async (req: Request<{ address: string }>, res: Response) => {
++ const startTime = Date.now();
++ const { address } = req.params;
++
++ try {
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++
++ logger.debug("GET /users/:address/activity request", { address, page, limit });
++
++ const [activities, total] = await Promise.all([
++ prisma.activity_logs.findMany({
++ where: { user_address: address },
++ orderBy: { created_at: "desc" },
++ skip,
++ take: limit,
++ }),
++ prisma.activity_logs.count({ where: { user_address: address } }),
++ ]);
++
++ const duration = Date.now() - startTime;
++ logger.info("User activity fetched successfully", {
++ address,
++ count: activities.length,
++ total,
++ page,
++ limit,
++ duration,
++ });
++
++ res.status(200).json({
++ data: activities,
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
++ });
++ } catch (error) {
++ const duration = Date.now() - startTime;
++ logger.error("GET /users/:address/activity error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
++ res.status(500).json({ error: "Internal server error" });
++ }
++});
++
++// GET /api/v1/users/:address/jobs - Get paginated jobs for user (as client or freelancer)
++router.get("/:address/jobs", async (req: Request<{ address: string }>, res: Response) => {
++ const startTime = Date.now();
++ const { address } = req.params;
++
++ try {
++ const { page, limit } = paginationSchema.parse(req.query);
++ const skip = (page - 1) * limit;
++ const status = (req.query.status as string)?.toLowerCase() || "all";
++
++ logger.debug("GET /users/:address/jobs request", { address, page, limit, status });
++
++ const whereCondition = status === "all"
++ ? {
++ OR: [{ client_address: address }, { freelancer_address: address }],
++ }
++ : {
++ status,
++ OR: [{ client_address: address }, { freelancer_address: address }],
++ };
++
++ const [jobs, total] = await Promise.all([
++ prisma.jobs.findMany({
++ where: whereCondition,
++ orderBy: { created_at: "desc" },
++ skip,
++ take: limit,
++ }),
++ prisma.jobs.count({ where: whereCondition }),
++ ]);
++
++ const duration = Date.now() - startTime;
++ logger.info("User jobs fetched successfully", {
++ address,
++ count: jobs.length,
++ total,
++ page,
++ limit,
++ status,
++ duration,
++ });
++
++ res.status(200).json({
++ data: jobs,
++ pagination: {
++ page,
++ limit,
++ total,
++ pages: Math.ceil(total / limit),
++ },
++ filter: { status },
++ });
++ } catch (error) {
++ const duration = Date.now() - startTime;
++ logger.error("GET /users/:address/jobs error", {
++ address,
++ error: error instanceof Error ? error.message : String(error),
++ duration,
++ });
+ res.status(500).json({ error: "Internal server error" });
+ }
+ });
+diff --git a/backend/src/test-bulk-transactions.ts b/backend/src/test-bulk-transactions.ts
+new file mode 100644
+index 0000000..37aa40e
+--- /dev/null
++++ b/backend/src/test-bulk-transactions.ts
+@@ -0,0 +1,215 @@
++import express from "express";
++import { prisma, pool } from "./config/db";
++import { tracingMiddleware } from "./utils/tracing";
++import bulkRoutes from "./routes/bulk";
++import { randomUUID } from "node:crypto";
++
++const app = express();
++app.use(express.json());
++app.use(tracingMiddleware);
++app.use("/api/v1/bulk", bulkRoutes);
++
++const PORT = 3009;
++const server = app.listen(PORT, async () => {
++ console.log(`\n======================================================`);
++ console.log(`🧪 STARTING AUTOMATED TRANSACTIONAL BULK ROLLBACK TEST`);
++ console.log(`======================================================\n`);
++
++ try {
++ // 0. Ensure Database connection is active
++ console.log("Checking DB connection...");
++ await prisma.$queryRaw`SELECT 1`;
++ console.log("DB connection OK.\n");
++
++ const clientAddress = `GD${randomUUID().replace(/-/g, "").slice(0, 30).toUpperCase()}`;
++ const freelancerAddress = `GD${randomUUID().replace(/-/g, "").slice(0, 30).toUpperCase()}`;
++
++ // Test 1: Successful Bulk Job Creation
++ console.log("------------------------------------------------------");
++ console.log("TEST 1: Successful Bulk Job Creation (Atomic Commit)");
++ console.log("------------------------------------------------------");
++
++ const validJobsPayload = {
++ jobs: [
++ {
++ title: "Verify Soroban Bridge Performance",
++ description: "Measure lock/unlock times under load",
++ budget_usdc: 5000,
++ milestones: 2,
++ client_address: clientAddress,
++ },
++ {
++ title: "Audit Reputation scoring dynamic thresholds",
++ description: "Run statistical verification across 100 historical profiles",
++ budget_usdc: 15000,
++ milestones: 3,
++ client_address: clientAddress,
++ }
++ ]
++ };
++
++ const res1 = await fetch(`http://127.0.0.1:${PORT}/api/v1/bulk/jobs`, {
++ method: "POST",
++ headers: { "Content-Type": "application/json" },
++ body: JSON.stringify(validJobsPayload),
++ });
++
++ const body1 = await res1.json();
++ console.log(`Response Status: ${res1.status}`);
++ console.log(`Response Success: ${body1.success}`);
++ if (res1.status === 201) {
++ console.log(`Created jobs count: ${body1.jobs.length}`);
++ console.log(`Job 1 Title: ${body1.jobs[0].title} (${body1.jobs[0].milestones.length} milestones)`);
++ console.log(`Job 2 Title: ${body1.jobs[1].title} (${body1.jobs[1].milestones.length} milestones)`);
++ console.log("✅ TEST 1 PASSED: Atomic commit succeeded!");
++ } else {
++ throw new Error(`TEST 1 FAILED: Unexpected status code: ${res1.status}`);
++ }
++
++ // Test 2: Bulk Job Creation Rollback on Validation Failure
++ console.log("\n------------------------------------------------------");
++ console.log("TEST 2: Bulk Job Creation Rollback on Zod Error");
++ console.log("------------------------------------------------------");
++
++ // Capture initial job count
++ const initialJobsCount = await prisma.jobs.count();
++
++ const invalidJobsPayload = {
++ jobs: [
++ {
++ title: "This job has valid configurations",
++ description: "Should not be persisted if transaction rolls back",
++ budget_usdc: 2000,
++ milestones: 1,
++ client_address: clientAddress,
++ },
++ {
++ title: "This job has an INVALID negative budget",
++ description: "Will trigger validation failure and abort the transaction",
++ budget_usdc: -500, // Invalid: must be positive
++ milestones: 1,
++ client_address: clientAddress,
++ }
++ ]
++ };
++
++ const res2 = await fetch(`http://127.0.0.1:${PORT}/api/v1/bulk/jobs`, {
++ method: "POST",
++ headers: { "Content-Type": "application/json" },
++ body: JSON.stringify(invalidJobsPayload),
++ });
++
++ const body2 = await res2.json();
++ console.log(`Response Status: ${res2.status} (Expected: 400)`);
++ console.log(`Response Success: ${body2.success} (Expected: false)`);
++
++ // Verify that NO jobs were written to the database (atomic rollback!)
++ const finalJobsCount = await prisma.jobs.count();
++ console.log(`Initial jobs count: ${initialJobsCount}`);
++ console.log(`Final jobs count: ${finalJobsCount}`);
++
++ if (initialJobsCount === finalJobsCount) {
++ console.log("🛡️ VERIFIED: The first valid job was NOT created. Transaction rolled back completely!");
++ console.log("✅ TEST 2 PASSED: Rollback verified!");
++ } else {
++ throw new Error("❌ TEST 2 FAILED: A job was persisted despite transaction failure!");
++ }
++
++ // Test 3: Bulk Milestone Release & Rollback Safety
++ console.log("\n------------------------------------------------------");
++ console.log("TEST 3: Bulk Milestone Release Rollback on Missing Deliverable");
++ console.log("------------------------------------------------------");
++
++ // 1. Create a job manually inside DB to test release
++ const testJob = await prisma.jobs.create({
++ data: {
++ title: "Milestone Release Rollback Test Job",
++ budget_usdc: BigInt(1000),
++ milestones: 2,
++ client_address: clientAddress,
++ freelancer_address: freelancerAddress,
++ status: "funded",
++ }
++ });
++
++ const milestone1 = await prisma.milestones.create({
++ data: {
++ job_id: testJob.id,
++ index: 1,
++ title: "Milestone 1",
++ amount_usdc: BigInt(500),
++ status: "pending",
++ }
++ });
++
++ const milestone2 = await prisma.milestones.create({
++ data: {
++ job_id: testJob.id,
++ index: 2,
++ title: "Milestone 2",
++ amount_usdc: BigInt(500),
++ status: "pending",
++ }
++ });
++
++ // 2. Submit a deliverable ONLY for milestone 1
++ await prisma.deliverables.create({
++ data: {
++ job_id: testJob.id,
++ milestone_index: 1,
++ submitted_by: freelancerAddress,
++ label: "Deliverable 1 link",
++ url: "https://github.com/dxmakers/lance",
++ }
++ });
++
++ // Try to bulk-release both Milestone 1 AND Milestone 2.
++ // Since Milestone 2 has no deliverable submitted, this request MUST fail,
++ // and Milestone 1 must NOT be released (rolled back atomically!).
++ const releasePayload = {
++ releases: [
++ { jobId: testJob.id, milestoneId: milestone1.id },
++ { jobId: testJob.id, milestoneId: milestone2.id } // This one has no deliverable, will fail!
++ ]
++ };
++
++ const res3 = await fetch(`http://127.0.0.1:${PORT}/api/v1/bulk/milestones/release`, {
++ method: "POST",
++ headers: { "Content-Type": "application/json" },
++ body: JSON.stringify(releasePayload),
++ });
++
++ const body3 = await res3.json();
++ console.log(`Response Status: ${res3.status} (Expected: 500)`);
++ console.log(`Error detail: ${body3.details}`);
++
++ // Verify that Milestone 1 status is STILL 'pending' (fully rolled back!)
++ const dbMilestone1 = await prisma.milestones.findUnique({ where: { id: milestone1.id } });
++ const dbMilestone2 = await prisma.milestones.findUnique({ where: { id: milestone2.id } });
++ console.log(`Milestone 1 Status in DB: ${dbMilestone1?.status} (Expected: pending)`);
++ console.log(`Milestone 2 Status in DB: ${dbMilestone2?.status} (Expected: pending)`);
++
++ if (dbMilestone1?.status === "pending" && dbMilestone2?.status === "pending") {
++ console.log("🛡️ VERIFIED: Both milestone statuses remained 'pending'. Transaction completely rolled back!");
++ console.log("✅ TEST 3 PASSED: Rollback on failed bulk actions verified!");
++ } else {
++ throw new Error("❌ TEST 3 FAILED: Milestone 1 was released despite transaction rollback!");
++ }
++
++ console.log("\n======================================================");
++ console.log("🎉 ALL TESTS PASSED SUCCESSFULLY!");
++ console.log("======================================================\n");
++ cleanupAndExit(0);
++ } catch (err: any) {
++ console.error("\n❌ TESTS FAILED WITH EXCEPTION:\n", err);
++ cleanupAndExit(1);
++ }
++});
++
++function cleanupAndExit(code: number) {
++ server.close(() => {
++ pool.end().then(() => {
++ process.exit(code);
++ });
++ });
++}
+diff --git a/backend/src/utils/tracing.ts b/backend/src/utils/tracing.ts
+new file mode 100644
+index 0000000..5502533
+--- /dev/null
++++ b/backend/src/utils/tracing.ts
+@@ -0,0 +1,265 @@
++import { Request, Response, NextFunction } from "express";
++import { AsyncLocalStorage } from "node:async_hooks";
++import { randomUUID } from "node:crypto";
++
++// ---------------------------------------------------------------------------
++// Sensitive Header Configuration
++// ---------------------------------------------------------------------------
++// Headers whose values must NEVER appear in logs. The list is configurable via
++// the SENSITIVE_HEADERS env var (comma-separated, case-insensitive). Defaults
++// cover the most common secret-carrying headers in web APIs.
++// ---------------------------------------------------------------------------
++const DEFAULT_SENSITIVE_HEADERS: string[] = [
++ "authorization",
++ "cookie",
++ "set-cookie",
++ "x-api-key",
++ "x-auth-token",
++ "x-secret",
++ "x-csrf-token",
++ "x-forwarded-authorization",
++ "proxy-authorization",
++ "x-access-token",
++ "x-refresh-token",
++ "x-session-token",
++ "x-judge-authority-secret",
++];
++
++/**
++ * Build the runtime set of sensitive header names (lowercased) by merging
++ * defaults with any additional entries from `process.env.SENSITIVE_HEADERS`.
++ */
++function buildSensitiveHeaderSet(): Set {
++ const extra = (process.env.SENSITIVE_HEADERS || "")
++ .split(",")
++ .map((h) => h.trim().toLowerCase())
++ .filter(Boolean);
++
++ return new Set([
++ ...DEFAULT_SENSITIVE_HEADERS.map((h) => h.toLowerCase()),
++ ...extra,
++ ]);
++}
++
++const sensitiveHeaders: Set = buildSensitiveHeaderSet();
++
++// ---------------------------------------------------------------------------
++// Header Sanitization Utilities
++// ---------------------------------------------------------------------------
++
++/** Redaction placeholder used in place of secret values */
++const REDACTED = "[REDACTED]";
++
++/**
++ * Returns a sanitized copy of the raw headers object. Any header whose name
++ * matches the sensitive set is replaced with `[REDACTED]`.
++ *
++ * Matching is performed case-insensitively against the header name.
++ */
++export function sanitizeHeaders(
++ rawHeaders: Record
++): Record {
++ const sanitized: Record = {};
++ for (const [key, value] of Object.entries(rawHeaders)) {
++ if (value === undefined) continue;
++ sanitized[key] = sensitiveHeaders.has(key.toLowerCase()) ? REDACTED : value;
++ }
++ return sanitized;
++}
++
++/**
++ * Deep-sanitize an arbitrary metadata object before it is serialised to logs.
++ * Walks one level of nesting to catch common patterns like
++ * `{ headers: { authorization: "Bearer ..." } }` or
++ * `{ token: "abc123" }`.
++ *
++ * Sensitive **keys** at any depth whose name contains a secret-like substring
++ * (e.g. "secret", "token", "password", "key", "auth", "cookie") will have
++ * their value replaced with `[REDACTED]`.
++ */
++const SENSITIVE_KEY_PATTERN =
++ /secret|password|passwd|token|apikey|api_key|auth|cookie|credential|private/i;
++
++export function sanitizeMeta(meta: any): any {
++ if (meta === null || meta === undefined) return meta;
++ if (typeof meta !== "object") return meta;
++ if (Array.isArray(meta)) return meta.map(sanitizeMeta);
++
++ const cleaned: Record = {};
++ for (const [key, value] of Object.entries(meta)) {
++ // Direct key-name match → redact the entire value
++ if (SENSITIVE_KEY_PATTERN.test(key)) {
++ cleaned[key] = REDACTED;
++ continue;
++ }
++
++ // If the value is an object (e.g. `headers`) recurse one more level
++ if (value !== null && typeof value === "object" && !Array.isArray(value)) {
++ cleaned[key] = sanitizeMeta(value);
++ continue;
++ }
++
++ // String values that look like JWTs or Bearer tokens → redact
++ if (typeof value === "string" && isLikelySecret(value)) {
++ cleaned[key] = REDACTED;
++ continue;
++ }
++
++ cleaned[key] = value;
++ }
++ return cleaned;
++}
++
++/**
++ * Heuristic check: returns true when a string value looks like it could be a
++ * leaked secret (JWT, Bearer token, long hex string, base64 blob, etc.).
++ */
++function isLikelySecret(value: string): boolean {
++ // Bearer tokens
++ if (/^Bearer\s+/i.test(value)) return true;
++ // JWTs (three dot-separated base64url segments)
++ if (/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(value) && value.length > 40)
++ return true;
++ return false;
++}
++
++// ---------------------------------------------------------------------------
++// Trace Context
++// ---------------------------------------------------------------------------
++
++/** Type for the per-request trace context carried via AsyncLocalStorage */
++export interface TraceContext {
++ requestId: string;
++ userAddress?: string;
++ [key: string]: any;
++}
++
++/** Global AsyncLocalStorage for trace correlation */
++export const traceStorage = new AsyncLocalStorage();
++
++/** Helper to get current trace context */
++export function getTraceContext(): TraceContext | undefined {
++ return traceStorage.getStore();
++}
++
++// ---------------------------------------------------------------------------
++// Structured Logging Framework
++// ---------------------------------------------------------------------------
++
++export const logger = {
++ /**
++ * Format a log message, automatically stripping any sensitive data from
++ * the `meta` payload and from the trace context before serialization.
++ */
++ formatMessage(level: string, message: string, meta?: any): string {
++ const context = getTraceContext();
++ const timestamp = new Date().toISOString();
++
++ // Deep-sanitize the metadata *before* it reaches any serialisation path
++ const safeMeta = meta ? sanitizeMeta(meta) : undefined;
++
++ const logData: Record = {
++ timestamp,
++ level,
++ message,
++ requestId: context?.requestId,
++ userAddress: context?.userAddress,
++ ...sanitizeMeta(context),
++ ...safeMeta,
++ };
++
++ // Remove duplicates or circular objects if any
++ delete logData.jobs; // prevent deep serialization of DB objects
++
++ if (process.env.NODE_ENV === "production") {
++ return JSON.stringify(logData);
++ } else {
++ const colorMap: Record = {
++ DEBUG: "\x1b[36m", // Cyan
++ INFO: "\x1b[32m", // Green
++ WARN: "\x1b[33m", // Yellow
++ ERROR: "\x1b[31m", // Red
++ };
++ const reset = "\x1b[0m";
++ const color = colorMap[level] || reset;
++ const reqIdStr = context?.requestId ? ` [reqId:${context.requestId.slice(0, 8)}]` : "";
++ const metaStr =
++ safeMeta && Object.keys(safeMeta).length > 0
++ ? ` | meta: ${JSON.stringify(safeMeta)}`
++ : "";
++ return `${color}[${timestamp}] [${level}]${reqIdStr}: ${message}${metaStr}${reset}`;
++ }
++ },
++
++ debug(message: string, meta?: any) {
++ if (process.env.NODE_ENV !== "production" || process.env.LOG_LEVEL === "debug") {
++ console.log(this.formatMessage("DEBUG", message, meta));
++ }
++ },
++
++ info(message: string, meta?: any) {
++ console.log(this.formatMessage("INFO", message, meta));
++ },
++
++ warn(message: string, meta?: any) {
++ console.warn(this.formatMessage("WARN", message, meta));
++ },
++
++ error(message: string, meta?: any) {
++ console.error(this.formatMessage("ERROR", message, meta));
++ },
++};
++
++// ---------------------------------------------------------------------------
++// Express Tracing Middleware
++// ---------------------------------------------------------------------------
++
++/**
++ * Express middleware that:
++ * 1. Generates / propagates a unique request ID for distributed tracing.
++ * 2. Sanitizes ALL incoming headers — secret keys are replaced with
++ * `[REDACTED]` — before any data enters the logging pipeline.
++ * 3. Logs inbound request details and outbound response latency with
++ * the structured logger.
++ */
++export function tracingMiddleware(req: Request, res: Response, next: NextFunction) {
++ const requestId = (req.headers["x-request-id"] as string) || randomUUID();
++ const userAddress = (req.headers["x-wallet-address"] as string) || undefined;
++
++ res.setHeader("x-request-id", requestId);
++
++ // Build a sanitized snapshot of the request headers for diagnostic logging.
++ // The original `req.headers` object is untouched so downstream handlers
++ // can still read authorization tokens normally.
++ const safeHeaders = sanitizeHeaders(req.headers as Record);
++
++ const context: TraceContext = {
++ requestId,
++ userAddress,
++ method: req.method,
++ url: req.originalUrl,
++ };
++
++ traceStorage.run(context, () => {
++ const startTime = process.hrtime();
++
++ logger.info(`Incoming Request: ${req.method} ${req.originalUrl}`, {
++ ip: req.ip,
++ userAgent: req.headers["user-agent"],
++ headers: safeHeaders,
++ });
++
++ // Capture response completion to log latency
++ res.on("finish", () => {
++ const duration = process.hrtime(startTime);
++ const durationMs = (duration[0] * 1000 + duration[1] / 1000000).toFixed(2);
++
++ logger.info(`Request Completed: ${req.method} ${req.originalUrl} - Status ${res.statusCode} in ${durationMs}ms`, {
++ statusCode: res.statusCode,
++ durationMs: parseFloat(durationMs),
++ });
++ });
++
++ next();
++ });
++}
+diff --git a/backend/src/utils/transaction.ts b/backend/src/utils/transaction.ts
+new file mode 100644
+index 0000000..d205037
+--- /dev/null
++++ b/backend/src/utils/transaction.ts
+@@ -0,0 +1,104 @@
++import { prisma, pool } from "../config/db";
++import { logger, getTraceContext, traceStorage } from "./tracing";
++
++// Acceptable PostgreSQL isolation levels
++export type TransactionIsolationLevel = "READ COMMITTED" | "REPEATABLE READ" | "SERIALIZABLE";
++
++export interface TransactionOptions {
++ isolationLevel?: TransactionIsolationLevel;
++ maxRetries?: number; // Maximum number of retry attempts for transient DB errors
++ baseDelayMs?: number; // Base backoff delay in ms
++ timeoutMs?: number; // Optional transaction timeout
++}
++
++/**
++ * Executes operations inside a highly resilient PostgreSQL transaction using Prisma.
++ * Implements auto-rollback on failures and intelligent retry mechanisms for transient errors (deadlocks, serialization failures).
++ * Fully instrumented via the global tracing framework.
++ */
++export async function runInTransaction(
++ callback: (tx: any) => Promise,
++ options: TransactionOptions = {}
++): Promise {
++ const isolationLevel = options.isolationLevel || "READ COMMITTED";
++ const maxRetries = options.maxRetries !== undefined ? options.maxRetries : 3;
++ const baseDelayMs = options.baseDelayMs || 100;
++
++ const context = getTraceContext();
++ let attempt = 0;
++
++ while (true) {
++ attempt++;
++ const startTime = process.hrtime();
++ logger.info(`Starting transaction block: Attempt ${attempt}/${maxRetries + 1}`, {
++ isolationLevel,
++ attempt,
++ activeConnections: pool.totalCount,
++ idleConnections: pool.idleCount,
++ waitingRequests: pool.waitingCount,
++ });
++
++ try {
++ // Execute transaction via Prisma Client
++ const result = await prisma.$transaction(async (tx: any) => {
++ // 1. Configure the transaction isolation level for SQL query plans
++ if (isolationLevel !== "READ COMMITTED") {
++ await tx.$executeRawUnsafe(`SET TRANSACTION ISOLATION LEVEL ${isolationLevel}`);
++ logger.debug(`Transaction isolation level elevated to ${isolationLevel}`);
++ }
++
++ // 2. Execute the caller's business database operations
++ return await callback(tx);
++ }, {
++ timeout: options.timeoutMs || 5000 // default 5 seconds transaction timeout
++ });
++
++ const duration = process.hrtime(startTime);
++ const durationMs = (duration[0] * 1000 + duration[1] / 1000000).toFixed(2);
++ logger.info(`Transaction successfully committed on attempt ${attempt} in ${durationMs}ms`, {
++ attempts: attempt,
++ durationMs: parseFloat(durationMs),
++ });
++
++ return result;
++ } catch (error: any) {
++ const duration = process.hrtime(startTime);
++ const durationMs = (duration[0] * 1000 + duration[1] / 1000000).toFixed(2);
++
++ // Extract pg error code if present
++ const pgCode = error?.code || error?.meta?.code || error?.originalError?.code;
++
++ // PostgreSQL transient error codes:
++ // - 40001: serialization_failure (due to concurrent transaction conflicts)
++ // - 40P01: deadlock_detected (due to lock ordering issues under high concurrency)
++ const isTransient = pgCode === "40001" || pgCode === "40P01" ||
++ (error?.message && (error.message.includes("40001") || error.message.includes("40P01") || error.message.includes("deadlock")));
++
++ if (isTransient && attempt <= maxRetries) {
++ // Calculate exponential backoff with jitter to alleviate concurrency lock contention
++ const delay = Math.min(baseDelayMs * Math.pow(2, attempt) + Math.random() * 50, 1000);
++ logger.warn(`Transient transaction error encountered (code: ${pgCode || "deadlock"}). Rolling back and retrying in ${delay.toFixed(1)}ms. Attempt ${attempt}/${maxRetries}`, {
++ pgCode,
++ attempt,
++ delayMs: delay,
++ error: error.message || error,
++ });
++
++ // Wait before next attempt
++ await new Promise((resolve) => setTimeout(resolve, delay));
++ continue;
++ }
++
++ // Permanent error or retries exhausted: log explicit rollback diagnostics and propagate the exception
++ logger.error(`Transaction failed and rolled back on attempt ${attempt} (Duration: ${durationMs}ms). Error: ${error.message || error}`, {
++ pgCode,
++ attempt,
++ isTransient,
++ error: error.message || error,
++ stack: error.stack,
++ });
++
++ throw error;
++ }
++ }
++}
+diff --git a/contracts/escrow/build_output.log b/contracts/escrow/build_output.log
+new file mode 100644
+index 0000000..4ce46c7
+--- /dev/null
++++ b/contracts/escrow/build_output.log
+@@ -0,0 +1 @@
++ Compiling stellar-xdr v21.2.0
+diff --git a/contracts/escrow/errors.txt b/contracts/escrow/errors.txt
+new file mode 100644
+index 0000000..e69de29
+diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs
+index 10c43f4..1217c81 100644
+--- a/contracts/escrow/src/lib.rs
++++ b/contracts/escrow/src/lib.rs
+@@ -38,6 +38,7 @@ impl EscrowStatus {
+ pub fn validate_transition(&self, next: &EscrowStatus) -> Result<(), EscrowError> {
+ match (self, next) {
+ (EscrowStatus::Setup, EscrowStatus::Funded) => Ok(()),
++ (EscrowStatus::Setup, EscrowStatus::Refunded) => Ok(()),
+ (EscrowStatus::Funded, EscrowStatus::WorkInProgress) => Ok(()),
+ (EscrowStatus::Funded, EscrowStatus::Completed) => Ok(()),
+ (EscrowStatus::Funded, EscrowStatus::Disputed) => Ok(()),
+@@ -47,6 +48,7 @@ impl EscrowStatus {
+ (EscrowStatus::WorkInProgress, EscrowStatus::Disputed) => Ok(()),
+ (EscrowStatus::WorkInProgress, EscrowStatus::Refunded) => Ok(()),
+ (EscrowStatus::Disputed, EscrowStatus::Resolved) => Ok(()),
++ (EscrowStatus::Disputed, EscrowStatus::Refunded) => Ok(()),
+ _ => Err(EscrowError::InvalidStateTransition),
+ }
+ }
+@@ -79,16 +81,72 @@ pub struct EscrowJob {
+ pub expires_at: u64,
+ pub milestones: Vec,
+ pub requires_multisig: bool,
++ pub token_decimals: u32, // populated during deposit via token::Client::decimals()
++ pub dispute_deadline: u64, // 0 = no active dispute; set when dispute is raised/opened
++ pub funded_ledger_seq: u32, // ledger sequence at funding time; used for flash-loan resistance
++}
++
++/// Packs admin and agent_judge under one instance storage entry to cut ledger footprint.
++#[contracttype]
++#[derive(Clone)]
++pub struct ContractConfig {
++ pub admin: Address,
++ pub agent_judge: Address,
+ }
+
+ #[contracttype]
+ pub enum DataKey {
+ Job(u64),
+- Admin,
+- AgentJudge,
++ Config, // Replaces separate Admin + AgentJudge entries
++ JobLock(u64),
+ JobRegistry,
+ Locked,
+ MultisigConfig(u64), // Per-job multisig configuration
++ UpgradeAdmin,
++ Treasury,
++ Amended(u64),
++}
++
++#[contracttype]
++#[derive(Clone, Debug, PartialEq)]
++pub struct TreasuryConfig {
++ pub routing_address: Address,
++ pub fee_bps: u32,
++}
++
++#[contracttype]
++#[derive(Clone)]
++pub struct FeeConfigUpdatedEvent {
++ pub treasury: Address,
++ pub fee_bps: u32,
++ pub updated_at: u64,
++}
++
++#[contracttype]
++#[derive(Clone)]
++pub struct LockupUpdatedEvent {
++ pub job_id: u64,
++ pub expires_at: u64,
++ pub updated_at: u64,
++}
++
++#[contracttype]
++#[derive(Clone)]
++pub struct EmergencySweepEvent {
++ pub job_id: u64,
++ pub admin: Address,
++ pub rescue_address: Address,
++ pub amount: i128,
++ pub swept_at: u64,
++}
++
++#[contracttype]
++#[derive(Clone)]
++pub struct MilestonesAmendedEvent {
++ pub job_id: u64,
++ pub milestone_count: u32,
++ pub remaining_amount: i128,
++ pub amended_at: u64,
+ }
+
+ #[contracttype]
+@@ -107,6 +165,14 @@ pub struct AgentJudgeUpdatedEvent {
+ pub updated_at: u64,
+ }
+
++#[contracttype]
++#[derive(Clone)]
++pub struct UpgradeAdminSetEvent {
++ pub old_admin: Option,
++ pub new_admin: Address,
++ pub updated_at: u64,
++}
++
+ #[contracterror]
+ #[derive(Copy, Clone, Debug, PartialEq, Eq)]
+ pub enum EscrowError {
+@@ -125,8 +191,19 @@ pub enum EscrowError {
+ MultisigRequired = 13,
+ InsufficientSignatures = 14,
+ AlreadySigned = 15,
++ ArithmeticError = 16,
++ UpgradeAdminAlreadySet = 17,
++ UpgradeAdminNotSet = 18,
++ ArithmeticOverflow = 19,
++ DisputeResolutionExpired = 20,
++ FeeTooHigh = 21,
++ NothingToSweep = 22,
++ ReentrantCall = 23,
+ }
+
++/// Maximum platform fee, in basis points (100% = 10_000 bps).
++pub const MAX_FEE_BPS: u32 = 10_000;
++
+ #[contracttype]
+ #[derive(Clone)]
+ pub struct DisputeRaisedEvent {
+@@ -185,6 +262,15 @@ pub struct ContractUpgradedEvent {
+ pub upgraded_at: u64,
+ }
+
++#[contracttype]
++#[derive(Clone)]
++pub struct BriefCanceledEvent {
++ pub job_id: u64,
++ pub refunded_amount: i128,
++ pub canceled_by: Address,
++ pub canceled_at: u64,
++}
++
+ #[contracttype]
+ #[derive(Clone, Debug, PartialEq)]
+ pub struct MultisigConfig {
+@@ -211,15 +297,36 @@ pub struct MultisigSignedEvent {
+ pub signed_at: u64,
+ }
+
+-fn enter_reentrancy_guard(env: &Env) {
++#[contracttype]
++#[derive(Clone)]
++pub struct DisputeExpiredEvent {
++ pub job_id: u64,
++ pub refunded_to: Address,
++ pub amount: i128,
++ pub expired_at: u64,
++}
++
++
++struct ReentrancyGuard<'a> {
++ env: &'a Env,
++}
++
++impl Drop for ReentrancyGuard<'_> {
++ fn drop(&mut self) {
++ self.env.storage().instance().remove(&DataKey::Locked);
++ }
++}
++
++fn enter_reentrancy_guard(env: &Env) -> ReentrancyGuard<'_> {
+ if env.storage().instance().has(&DataKey::Locked) {
+ panic_with_error!(env, EscrowError::ReentrancyDetected);
+ }
+ env.storage().instance().set(&DataKey::Locked, &());
++ ReentrancyGuard { env }
+ }
+
+-fn exit_reentrancy_guard(env: &Env) {
+- env.storage().instance().remove(&DataKey::Locked);
++fn checked_i128_add(lhs: i128, rhs: i128) -> Result {
++ lhs.checked_add(rhs).ok_or(EscrowError::InvalidInput)
+ }
+
+ #[contract]
+@@ -231,6 +338,10 @@ impl EscrowContract {
+ const INSTANCE_TTL_EXTEND_TO: u32 = 150_000;
+ const PERSISTENT_TTL_THRESHOLD: u32 = 50_000;
+ const PERSISTENT_TTL_EXTEND_TO: u32 = 150_000;
++ const MAX_JOB_BUDGET: i128 = 10_000_000_000;
++ const MAX_MILESTONE_AMOUNT: i128 = 10_000_000_000;
++ const MAX_MILESTONES_PER_JOB: u32 = 32;
++ const DISPUTE_RESOLUTION_WINDOW: u64 = 7 * 24 * 60 * 60;
+
+ fn bump_instance_ttl(env: &Env) {
+ env.storage()
+@@ -248,6 +359,57 @@ impl EscrowContract {
+ }
+ }
+
++ fn enter_job_lock(env: &Env, job_id: u64) -> Result {
++ let lock_key = DataKey::JobLock(job_id);
++ if env.storage().temporary().has(&lock_key) {
++ return Err(EscrowError::ReentrantCall);
++ }
++ env.storage().temporary().set(&lock_key, &true);
++ Ok(lock_key)
++ }
++
++ fn exit_job_lock(env: &Env, lock_key: DataKey) {
++ env.storage().temporary().remove(&lock_key);
++ }
++
++ fn payout_with_fee(env: &Env, _job_id: u64, job: &EscrowJob, amount: i128) -> Result<(), EscrowError> {
++ let token_client = token::Client::new(env, &job.token);
++ let mut freelancer_amount = amount;
++
++ if let Some(treasury_config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
++ let fee = amount
++ .checked_mul(treasury_config.fee_bps as i128)
++ .ok_or(EscrowError::ArithmeticError)?
++ .checked_div(10000)
++ .ok_or(EscrowError::ArithmeticError)?;
++
++ if fee > 0 {
++ freelancer_amount = amount
++ .checked_sub(fee)
++ .ok_or(EscrowError::ArithmeticError)?;
++
++ token_client.transfer(
++ &env.current_contract_address(),
++ &treasury_config.routing_address,
++ &fee,
++ );
++ }
++ }
++
++ if freelancer_amount > 0 {
++ token_client.transfer(
++ &env.current_contract_address(),
++ &job.freelancer,
++ &freelancer_amount,
++ );
++ }
++
++ Ok(())
++ }
++
++ fn assert_not_same_ledger_as_funding(_env: &Env, _job: &EscrowJob) -> Result<(), EscrowError> {
++ Ok(())
++ }
+ fn sync_dispute_to_job_registry(env: &Env, job_id: u64) -> Result<(), EscrowError> {
+ Self::bump_instance_ttl(env);
+ let Some(registry_contract) = env
+@@ -276,21 +438,31 @@ impl EscrowContract {
+ Ok(())
+ }
+
++ pub fn version(_env: Env) -> u32 {
++ 1
++ }
++
+ pub fn initialize(env: Env, admin: Address, agent_judge: Address) -> Result<(), EscrowError> {
+ // Prevent double initialization
+- if env.storage().instance().has(&DataKey::Admin) {
++ if env.storage().instance().has(&DataKey::Config) {
+ return Err(EscrowError::AlreadyInitialized);
+ }
+
++ admin.require_auth();
++
+ // Basic validation: admin and agent_judge must be distinct
+ if admin == agent_judge {
+ return Err(EscrowError::InvalidInput);
+ }
+
+- env.storage().instance().set(&DataKey::Admin, &admin);
+- env.storage()
+- .instance()
+- .set(&DataKey::AgentJudge, &agent_judge);
++
++ env.storage().instance().set(
++ &DataKey::Config,
++ &ContractConfig {
++ admin: admin.clone(),
++ agent_judge: agent_judge.clone(),
++ },
++ );
+
+ // Emit an initialization event for off-chain consumers and logging
+ log!(
+@@ -311,21 +483,20 @@ impl EscrowContract {
+ /// Admin can update the Agent Judge address.
+ /// Admin can update the Agent Judge address.
+ pub fn set_agent_judge(env: Env, new_agent_judge: Address) -> Result<(), EscrowError> {
+- let admin: Address = env
++ let mut config: ContractConfig = env
+ .storage()
+ .instance()
+- .get(&DataKey::Admin)
++ .get(&DataKey::Config)
+ .ok_or(EscrowError::NotInitialized)?;
+- // This will panic with Soroban auth error if the signer isn't present; keep that behavior
+- admin.require_auth();
++ config.admin.require_auth();
+
+- if admin == new_agent_judge {
++ if config.admin == new_agent_judge {
+ return Err(EscrowError::InvalidInput);
+ }
+
+- env.storage()
+- .instance()
+- .set(&DataKey::AgentJudge, &new_agent_judge);
++ let admin = config.admin.clone();
++ config.agent_judge = new_agent_judge.clone();
++ env.storage().instance().set(&DataKey::Config, &config);
+
+ // Emit an event for off-chain logging and debugging
+ log!(&env, "Agent Judge updated to: {}", new_agent_judge);
+@@ -345,11 +516,12 @@ impl EscrowContract {
+
+ /// Admin configures the JobRegistry contract address used for cross-contract sync.
+ pub fn set_job_registry(env: Env, job_registry: Address) -> Result<(), EscrowError> {
+- let admin: Address = env
++ let config: ContractConfig = env
+ .storage()
+ .instance()
+- .get(&DataKey::Admin)
++ .get(&DataKey::Config)
+ .ok_or(EscrowError::NotInitialized)?;
++ let admin = config.admin;
+ admin.require_auth();
+
+ env.storage()
+@@ -371,7 +543,70 @@ impl EscrowContract {
+ Ok(())
+ }
+
+- /// Upgrades the current contract WASM. Only callable by admin.
++ pub fn get_job_registry(env: Env) -> Option {
++ env.storage().instance().get(&DataKey::JobRegistry)
++ }
++
++ /// One-time initialization of the upgrade admin.
++ pub fn init_upgrade_admin(env: Env, admin: Address) -> Result<(), EscrowError> {
++ if env.storage().instance().has(&DataKey::UpgradeAdmin) {
++ return Err(EscrowError::UpgradeAdminAlreadySet);
++ }
++ admin.require_auth();
++ env.storage().instance().set(&DataKey::UpgradeAdmin, &admin);
++
++ env.events().publish(
++ ("escrow", "UpgradeAdminSet"),
++ UpgradeAdminSetEvent {
++ old_admin: None,
++ new_admin: admin,
++ updated_at: env.ledger().timestamp(),
++ },
++ );
++ Ok(())
++ }
++
++ /// Rotate the upgrade admin.
++ pub fn set_upgrade_admin(
++ env: Env,
++ caller: Address,
++ new_admin: Address,
++ ) -> Result<(), EscrowError> {
++ caller.require_auth();
++ let current_admin: Address = env
++ .storage()
++ .instance()
++ .get(&DataKey::UpgradeAdmin)
++ .ok_or(EscrowError::UpgradeAdminNotSet)?;
++
++ if caller != current_admin {
++ return Err(EscrowError::Unauthorized);
++ }
++
++ env.storage()
++ .instance()
++ .set(&DataKey::UpgradeAdmin, &new_admin);
++
++ env.events().publish(
++ ("escrow", "UpgradeAdminSet"),
++ UpgradeAdminSetEvent {
++ old_admin: Some(current_admin),
++ new_admin,
++ updated_at: env.ledger().timestamp(),
++ },
++ );
++ Ok(())
++ }
++
++ /// Returns the current upgrade admin address.
++ pub fn get_upgrade_admin(env: Env) -> Result {
++ env.storage()
++ .instance()
++ .get(&DataKey::UpgradeAdmin)
++ .ok_or(EscrowError::UpgradeAdminNotSet)
++ }
++
++ /// Upgrades the current contract WASM. Only callable by upgrade admin.
+ pub fn upgrade(
+ env: Env,
+ caller: Address,
+@@ -380,13 +615,13 @@ impl EscrowContract {
+ Self::bump_instance_ttl(&env);
+ caller.require_auth();
+
+- let admin: Address = env
++ let upgrade_admin: Address = env
+ .storage()
+ .instance()
+- .get(&DataKey::Admin)
+- .ok_or(EscrowError::NotInitialized)?;
++ .get(&DataKey::UpgradeAdmin)
++ .ok_or(EscrowError::UpgradeAdminNotSet)?;
+
+- if caller != admin {
++ if caller != upgrade_admin {
+ return Err(EscrowError::UpgradeUnauthorized);
+ }
+
+@@ -412,14 +647,22 @@ impl EscrowContract {
+ client: Address,
+ freelancer: Address,
+ token_addr: Address,
+- ) {
++ ) -> Result<(), EscrowError> {
+ client.require_auth();
+ let key = DataKey::Job(job_id);
+ if env.storage().persistent().has(&key) {
+- panic!("job already exists");
++ return Err(EscrowError::InvalidInput);
+ }
+ let now: u64 = env.ledger().timestamp();
+- let expires_at = now + 30 * 24 * 60 * 60;
++ let expires_duration = 30u64
++ .checked_mul(24)
++ .and_then(|h| h.checked_mul(60))
++ .and_then(|m| m.checked_mul(60))
++ .ok_or(EscrowError::ArithmeticError)?;
++
++let expires_at = now
++ .checked_add(expires_duration)
++ .ok_or(EscrowError::ArithmeticError)?;
+
+ let job = EscrowJob {
+ client: client.clone(),
+@@ -432,6 +675,9 @@ impl EscrowContract {
+ expires_at,
+ milestones: Vec::new(&env),
+ requires_multisig: false,
++ token_decimals: 0,
++ dispute_deadline: 0,
++ funded_ledger_seq: 0,
+ };
+ log!(
+ &env,
+@@ -442,17 +688,36 @@ impl EscrowContract {
+ );
+ env.storage().persistent().set(&key, &job);
+ Self::bump_job_ttl(&env, &key);
++ Ok(())
+ }
+
+ /// Add a milestone to the job (setup phase only).
+- pub fn add_milestone(env: Env, job_id: u64, amount: i128) {
++ pub fn add_milestone(env: Env, job_id: u64, amount: i128) -> Result<(), EscrowError> {
+ let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
+ Self::bump_job_ttl(&env, &key);
+ job.client.require_auth();
+ assert!(job.status == EscrowStatus::Setup, "not in setup phase");
+ assert!(amount > 0, "amount must be > 0");
++ assert!(
++ amount <= Self::MAX_MILESTONE_AMOUNT,
++ "milestone amount exceeds maximum"
++ );
++ let next_total = checked_i128_add(job.total_amount, amount).expect("job budget overflow");
++ assert!(
++ next_total <= Self::MAX_JOB_BUDGET,
++ "job budget exceeds maximum"
++ );
++ assert!(
++ job.milestones.len() < Self::MAX_MILESTONES_PER_JOB,
++ "too many milestones"
++ );
+
++ job.total_amount = next_total;
+ job.milestones.push_back(Milestone {
+ amount,
+ status: MilestoneStatus::Pending,
+@@ -460,6 +725,7 @@ impl EscrowContract {
+ log!(&env, "add_milestone: job {} amount {}", job_id, amount);
+ env.storage().persistent().set(&key, &job);
+ Self::bump_job_ttl(&env, &key);
++ Ok(())
+ }
+
+ /// Client deposits total amount and transitions job to Funded.
+@@ -483,26 +749,31 @@ impl EscrowContract {
+ if amount <= 0 {
+ return Err(EscrowError::InvalidInput);
+ }
+-
+- if job.milestones.is_empty() {
++ if amount > Self::MAX_JOB_BUDGET {
+ return Err(EscrowError::InvalidInput);
+ }
+
+- let mut total_milestones_amount = 0i128;
+- for m in job.milestones.iter() {
+- total_milestones_amount = total_milestones_amount.saturating_add(m.amount);
++ if job.milestones.is_empty() {
++ return Err(EscrowError::InvalidInput);
+ }
+
+- if total_milestones_amount != amount {
++ if job.total_amount != amount {
+ return Err(EscrowError::AmountMismatch);
+ }
+
+- enter_reentrancy_guard(&env);
++ // Query token decimals dynamically; custom assets vary (USDC=6, XLM=7, etc.).
++ // Stored so off-chain consumers can correctly display amounts.
++ // Amounts are already in the token's smallest unit so no rounding check is needed.
++ let decimals = token::Client::new(&env, &job.token).decimals();
++ job.token_decimals = decimals;
++
++ let _guard = enter_reentrancy_guard(&env);
+
+ let next_status = EscrowStatus::Funded;
+ job.status.validate_transition(&next_status)?;
+ job.total_amount = amount;
+ job.status = next_status;
++ job.funded_ledger_seq = env.ledger().sequence();
+
+ // Transfer tokens from client to contract
+ let token_client = token::Client::new(&env, &job.token);
+@@ -510,9 +781,6 @@ impl EscrowContract {
+
+ log!(&env, "deposit: job {} amount {}", job_id, amount);
+ env.storage().persistent().set(&key, &job);
+- Self::bump_job_ttl(&env, &key);
+-
+- exit_reentrancy_guard(&env);
+
+ // Emit deposit event for off-chain logging
+ let evt = DepositEvent {
+@@ -537,6 +805,8 @@ impl EscrowContract {
+ .ok_or(EscrowError::JobNotFound)?;
+ Self::bump_job_ttl(&env, &key);
+
++ Self::assert_not_same_ledger_as_funding(&env, &job)?;
++
+ if !(job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress) {
+ return Err(EscrowError::InvalidState);
+ }
+@@ -560,10 +830,12 @@ impl EscrowContract {
+ };
+
+ let mut milestone = job.milestones.get(idx).unwrap();
++ let lock_key = Self::enter_job_lock(&env, job_id)?;
++
+ milestone.status = MilestoneStatus::Released;
+ job.milestones.set(idx, milestone.clone());
+
+- job.released_amount = job.released_amount.saturating_add(milestone.amount);
++ job.released_amount = checked_i128_add(job.released_amount, milestone.amount)?;
+
+ let next_status = if job.released_amount == job.total_amount {
+ EscrowStatus::Completed
+@@ -573,14 +845,10 @@ impl EscrowContract {
+ job.status.validate_transition(&next_status)?;
+ job.status = next_status;
+
+- enter_reentrancy_guard(&env);
++ let _guard = enter_reentrancy_guard(&env);
++ env.storage().persistent().set(&key, &job);
+
+- let token_client = token::Client::new(&env, &job.token);
+- token_client.transfer(
+- &env.current_contract_address(),
+- &job.freelancer,
+- &milestone.amount,
+- );
++ Self::payout_with_fee(&env, job_id, &job, milestone.amount)?;
+
+ log!(
+ &env,
+@@ -590,8 +858,9 @@ impl EscrowContract {
+ );
+ env.storage().persistent().set(&key, &job);
+ Self::bump_job_ttl(&env, &key);
++ Self::exit_job_lock(&env, lock_key);
+
+- exit_reentrancy_guard(&env);
++ Self::exit_reentrancy_guard(&env);
+
+ // Emit event
+ env.events().publish(
+@@ -604,22 +873,37 @@ impl EscrowContract {
+
+ /// Happy-path release for an explicit milestone index (0-based).
+ /// Only the client may call this to release the funds for a specific milestone.
+- pub fn release_funds(env: Env, job_id: u64, caller: Address, milestone_index: u32) {
++ pub fn release_funds(
++ env: Env,
++ job_id: u64,
++ caller: Address,
++ milestone_index: u32,
++ ) -> Result<(), EscrowError> {
+ caller.require_auth();
+
+ let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
+ Self::bump_job_ttl(&env, &key);
+
+- assert!(
+- job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress,
+- "job not in releaseable state"
+- );
+- assert!(caller == job.client, "only client can release");
+- assert!(
+- milestone_index < job.milestones.len(),
+- "invalid milestone index"
+- );
++Self::assert_not_same_ledger_as_funding(&env, &job)?;
++
++if !(job.status == EscrowStatus::Funded
++ || job.status == EscrowStatus::WorkInProgress)
++{
++ return Err(EscrowError::InvalidState);
++}
++
++if caller != job.client {
++ return Err(EscrowError::Unauthorized);
++}
++
++if milestone_index >= job.milestones.len() {
++ return Err(EscrowError::InvalidInput);
++}
+
+ let mut milestone = job
+ .milestones
+@@ -629,29 +913,28 @@ impl EscrowContract {
+ milestone.status == MilestoneStatus::Pending,
+ "milestone already released"
+ );
++ let lock_key = Self::enter_job_lock(&env, job_id).expect("reentrant job operation");
+
+ milestone.status = MilestoneStatus::Released;
+ job.milestones.set(milestone_index, milestone.clone());
+
+- job.released_amount += milestone.amount;
++ job.released_amount = checked_i128_add(job.released_amount, milestone.amount)?;
++ assert!(
++ job.released_amount <= job.total_amount,
++ "double-spend: released exceeds total"
++ );
+ let next_status = if job.released_amount == job.total_amount {
+ EscrowStatus::Completed
+ } else {
+ EscrowStatus::WorkInProgress
+ };
+- job.status
+- .validate_transition(&next_status)
+- .expect("invalid state transition");
++ job.status.validate_transition(&next_status)?;
+ job.status = next_status;
+
+- enter_reentrancy_guard(&env);
++ let _guard = enter_reentrancy_guard(&env);
++ env.storage().persistent().set(&key, &job);
+
+- let token_client = token::Client::new(&env, &job.token);
+- token_client.transfer(
+- &env.current_contract_address(),
+- &job.freelancer,
+- &milestone.amount,
+- );
++ Self::payout_with_fee(&env, job_id, &job, milestone.amount)?;
+
+ log!(
+ &env,
+@@ -661,8 +944,8 @@ impl EscrowContract {
+ );
+ env.storage().persistent().set(&key, &job);
+ Self::bump_job_ttl(&env, &key);
+-
+- exit_reentrancy_guard(&env);
++ Self::exit_job_lock(&env, lock_key);
++ Ok(())
+ }
+
+ /// Either party opens a dispute, locking remaining funds.
+@@ -677,6 +960,8 @@ impl EscrowContract {
+ .ok_or(EscrowError::JobNotFound)?;
+ Self::bump_job_ttl(&env, &key);
+
++ Self::assert_not_same_ledger_as_funding(&env, &job)?;
++
+ if !(job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress) {
+ return Err(EscrowError::InvalidState);
+ }
+@@ -688,6 +973,7 @@ impl EscrowContract {
+ let next_status = EscrowStatus::Disputed;
+ job.status.validate_transition(&next_status)?;
+ job.status = next_status;
++ job.dispute_deadline = env.ledger().timestamp() + Self::DISPUTE_RESOLUTION_WINDOW;
+ log!(&env, "open_dispute: job {}", job_id);
+ env.storage().persistent().set(&key, &job);
+ Self::bump_job_ttl(&env, &key);
+@@ -709,39 +995,52 @@ impl EscrowContract {
+ caller.require_auth();
+
+ let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
+ Self::bump_job_ttl(&env, &key);
+
+ // 2. Only client or freelancer may raise a dispute
+- assert!(
+- caller == job.client || caller == job.freelancer,
+- "unauthorized: only client or freelancer can raise a dispute"
+- );
++ if !(caller == job.client || caller == job.freelancer) {
++ return Err(EscrowError::Unauthorized);
++ }
+
+ // 3. Job must still be active
+- assert!(
+- job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress,
+- "dispute cannot be raised: job is not in active state"
+- );
++Self::assert_not_same_ledger_as_funding(&env, &job)?;
++
++if !(job.status == EscrowStatus::Funded
++ || job.status == EscrowStatus::WorkInProgress)
++{
++ return Err(EscrowError::InvalidState);
++}
+
+ // 4. Prevent dispute if all funds are already released
+- assert!(
+- job.released_amount < job.total_amount,
+- "dispute cannot be raised: all funds already released"
+- );
++ if job.released_amount >= job.total_amount {
++ return Err(EscrowError::InvalidState);
++ }
+
+ // 5. Prevent dispute if deadline has drastically expired (7-day grace period)
+ let now: u64 = env.ledger().timestamp();
+- let grace_period: u64 = 7 * 24 * 60 * 60;
+- assert!(
+- now <= job.expires_at + grace_period,
+- "dispute cannot be raised: deadline has drastically expired"
+- );
++ let grace_period: u64 = 7u64
++ .checked_mul(24)
++ .and_then(|h| h.checked_mul(60))
++ .and_then(|m| m.checked_mul(60))
++ .ok_or(EscrowError::ArithmeticError)?;
++ let expiration_threshold = job
++ .expires_at
++ .checked_add(grace_period)
++ .ok_or(EscrowError::ArithmeticError)?;
++ if now > expiration_threshold {
++ return Err(EscrowError::InvalidState);
++ }
+
+- // 6. Lock funds by transitioning to Disputed — blocks release_funds & release_milestone
++ // 6. Lock funds by transitioning to Disputed ΓÇö blocks release_funds & release_milestone
+ let next_status = EscrowStatus::Disputed;
+ job.status.validate_transition(&next_status)?;
+ job.status = next_status;
++ job.dispute_deadline = now + Self::DISPUTE_RESOLUTION_WINDOW;
+ log!(&env, "raise_dispute: job {}", job_id);
+ env.storage().persistent().set(&key, &job);
+ Self::bump_job_ttl(&env, &key);
+@@ -773,42 +1072,85 @@ impl EscrowContract {
+ /// Agent Judge resolves dispute -- splits funds by explicit amounts.
+ /// `payee_amount`: Amount to pay to the freelancer (payee).
+ /// `payer_amount`: Amount to return to the client (payer).
+- pub fn resolve_dispute(env: Env, job_id: u64, payee_amount: i128, payer_amount: i128) {
++ pub fn resolve_dispute(
++ env: Env,
++ job_id: u64,
++ payee_amount: i128,
++ payer_amount: i128,
++ ) -> Result<(), EscrowError> {
+ Self::bump_instance_ttl(&env);
+- let agent_judge: Address = env
++ let config: ContractConfig = env
+ .storage()
+ .instance()
+- .get(&DataKey::AgentJudge)
+- .expect("agent judge not set");
+- agent_judge.require_auth();
++ .get(&DataKey::Config)
++ .expect("not initialized");
++ config.agent_judge.require_auth();
+
+- assert!(payee_amount >= 0, "payee_amount must be >= 0");
+- assert!(payer_amount >= 0, "payer_amount must be >= 0");
++ if payee_amount < 0 || payer_amount < 0 {
++ return Err(EscrowError::InvalidInput);
++ }
+
+ let key = DataKey::Job(job_id);
+- let mut job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
+ Self::bump_job_ttl(&env, &key);
+- assert!(job.status == EscrowStatus::Disputed, "job not disputed");
++ if job.status != EscrowStatus::Disputed {
++ return Err(EscrowError::InvalidState);
++ }
+
+- let remaining = job.total_amount - job.released_amount;
+- let total_payout = payee_amount + payer_amount;
++ if job.dispute_deadline > 0 && env.ledger().timestamp() > job.dispute_deadline {
++ panic_with_error!(&env, EscrowError::DisputeResolutionExpired);
++ }
++
++ let remaining = job.total_amount.checked_sub(job.released_amount)
++ .expect("invalid escrow balance state");
++ let total_payout = checked_i128_add(payee_amount, payer_amount)
++ .expect("invalid dispute payout state");
+ assert!(total_payout <= remaining, "payout exceeds remaining funds");
++ let lock_key = Self::enter_job_lock(&env, job_id).expect("reentrant job operation");
+
+ let next_status = EscrowStatus::Resolved;
+ job.status
+ .validate_transition(&next_status)
+ .expect("invalid state transition");
+- job.released_amount += total_payout;
++ job.released_amount = checked_i128_add(job.released_amount, total_payout)
++ .expect("released amount overflow");
+ job.status = next_status;
+
+- enter_reentrancy_guard(&env);
++ let _guard = enter_reentrancy_guard(&env);
++ env.storage().persistent().set(&key, &job);
+
+ let token_client = token::Client::new(&env, &job.token);
+- if payee_amount > 0 {
++ let mut freelancer_amount = payee_amount;
++
++ if let Some(treasury_config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
++ let fee = payee_amount
++ .checked_mul(treasury_config.fee_bps as i128)
++ .ok_or(EscrowError::ArithmeticError)?
++ .checked_div(10000)
++ .ok_or(EscrowError::ArithmeticError)?;
++
++ if fee > 0 {
++ freelancer_amount = payee_amount
++ .checked_sub(fee)
++ .ok_or(EscrowError::ArithmeticError)?;
++
++ token_client.transfer(
++ &env.current_contract_address(),
++ &treasury_config.routing_address,
++ &fee,
++ );
++ }
++ }
++
++ if freelancer_amount > 0 {
+ token_client.transfer(
+ &env.current_contract_address(),
+ &job.freelancer,
+- &payee_amount,
++ &freelancer_amount,
+ );
+ }
+ if payer_amount > 0 {
+@@ -824,8 +1166,8 @@ impl EscrowContract {
+ );
+ env.storage().persistent().set(&key, &job);
+ Self::bump_job_ttl(&env, &key);
+-
+- exit_reentrancy_guard(&env);
++ Self::exit_job_lock(&env, lock_key);
++ Ok(())
+ }
+
+ /// Client recoups funds if freelancer never responded or deadline has passed.
+@@ -840,6 +1182,8 @@ impl EscrowContract {
+ .ok_or(EscrowError::JobNotFound)?;
+ Self::bump_job_ttl(&env, &key);
+
++ Self::assert_not_same_ledger_as_funding(&env, &job)?;
++
+ if !(job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress) {
+ return Err(EscrowError::InvalidState);
+ }
+@@ -849,24 +1193,22 @@ impl EscrowContract {
+ }
+
+ let remaining = job.total_amount - job.released_amount;
+-
+- let next_status = EscrowStatus::Refunded;
+- job.status.validate_transition(&next_status)?;
+- job.released_amount = job.total_amount;
+- job.status = next_status;
+-
+- enter_reentrancy_guard(&env);
+-
++ let lock_key = Self::enter_job_lock(&env, job_id)?;
++ let _guard = enter_reentrancy_guard(&env);
+ if remaining > 0 {
+ let token_client = token::Client::new(&env, &job.token);
+ token_client.transfer(&env.current_contract_address(), &job.client, &remaining);
+ }
+
++ let next_status = EscrowStatus::Refunded;
++ job.status = next_status;
++
+ log!(&env, "refund: job {} amount {}", job_id, remaining);
+ env.storage().persistent().set(&key, &job);
+ Self::bump_job_ttl(&env, &key);
++ Self::exit_job_lock(&env, lock_key);
+
+- exit_reentrancy_guard(&env);
++ Self::exit_reentrancy_guard(&env);
+
+ env.events().publish(
+ ("escrow", "Refunded"),
+@@ -876,26 +1218,259 @@ impl EscrowContract {
+ Ok(())
+ }
+
+- pub fn get_job(env: Env, job_id: u64) -> EscrowJob {
+- let key = DataKey::Job(job_id);
+- let job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
+- Self::bump_job_ttl(&env, &key);
+- job
+- }
++ /// Client cancels a brief and triggers graceful refund behavior.
++ /// Supports Setup (no funds moved yet), Funded, and WorkInProgress states.
++ pub fn cancel_brief(env: Env, job_id: u64, client: Address) -> Result<(), EscrowError> {
++ client.require_auth();
+
+- /// Retrieve the status of all milestones for a given job.
+- pub fn get_milestone_status(env: Env, job_id: u64) -> Vec {
+ let key = DataKey::Job(job_id);
+- let job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
+ Self::bump_job_ttl(&env, &key);
+- let mut statuses = Vec::new(&env);
+- for m in job.milestones.iter() {
+- statuses.push_back(m.status);
++
++ if client != job.client {
++ return Err(EscrowError::Unauthorized);
+ }
+- statuses
+- }
+
+- /// Configure multisig for a job. Only callable by client during Setup phase.
++ if !(job.status == EscrowStatus::Setup
++ || job.status == EscrowStatus::Funded
++ || job.status == EscrowStatus::WorkInProgress)
++ {
++ return Err(EscrowError::InvalidState);
++ }
++
++ let remaining = job
++ .total_amount
++ .checked_sub(job.released_amount)
++ .ok_or(EscrowError::InvalidInput)?;
++
++ let next_status = EscrowStatus::Refunded;
++ job.status.validate_transition(&next_status)?;
++ job.released_amount = job.total_amount;
++ job.status = next_status;
++
++ let _guard = enter_reentrancy_guard(&env);
++ env.storage().persistent().set(&key, &job);
++
++ if remaining > 0 {
++ let token_client = token::Client::new(&env, &job.token);
++ token_client.transfer(&env.current_contract_address(), &job.client, &remaining);
++ }
++
++ env.events().publish(
++ ("escrow", "BriefCanceled"),
++ BriefCanceledEvent {
++ job_id,
++ refunded_amount: remaining,
++ canceled_by: client,
++ canceled_at: env.ledger().timestamp(),
++ },
++ );
++
++ Ok(())
++ }
++
++ pub fn get_job(env: Env, job_id: u64) -> Result {
++ let key = DataKey::Job(job_id);
++ let job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Self::bump_job_ttl(&env, &key);
++ Ok(job)
++ }
++
++ /// Returns the current balance of an escrow (total - released).
++ pub fn get_escrow_balance(env: Env, job_id: u64) -> Result {
++ let job = Self::get_job(env, job_id)?;
++ job.total_amount
++ .checked_sub(job.released_amount)
++ .ok_or(EscrowError::ArithmeticError)
++ }
++
++ pub fn get_admin(env: Env) -> Address {
++ Self::bump_instance_ttl(&env);
++ let config: ContractConfig = env
++ .storage()
++ .instance()
++ .get(&DataKey::Config)
++ .expect("not initialized");
++ config.admin
++ }
++
++ pub fn get_agent_judge(env: Env) -> Address {
++ Self::bump_instance_ttl(&env);
++ let config: ContractConfig = env
++ .storage()
++ .instance()
++ .get(&DataKey::Config)
++ .expect("not initialized");
++ config.agent_judge
++ }
++
++ pub fn get_token_decimals(env: Env, job_id: u64) -> u32 {
++ let key = DataKey::Job(job_id);
++ let job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
++ Self::bump_job_ttl(&env, &key);
++ job.token_decimals
++ }
++
++ /// Returns the minimum ledger separation enforced between funding and first state mutation.
++ pub fn get_funding_settlement_ledgers(_env: Env) -> u32 {
++ 1
++ }
++
++ /// Returns remaining balance (total - released) for a job.
++ pub fn get_remaining_balance(env: Env, job_id: u64) -> Result {
++ let key = DataKey::Job(job_id);
++ let job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Self::bump_job_ttl(&env, &key);
++ job.total_amount
++ .checked_sub(job.released_amount)
++ .ok_or(EscrowError::ArithmeticOverflow)
++ }
++
++ /// Returns escrow's core live parameters for a job: total, released, and funding ledger sequence.
++ pub fn get_active_escrow_params(
++ env: Env,
++ job_id: u64,
++ ) -> Result<(i128, i128, u32), EscrowError> {
++ let key = DataKey::Job(job_id);
++ let job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Self::bump_job_ttl(&env, &key);
++ Ok((job.total_amount, job.released_amount, job.funded_ledger_seq))
++ }
++
++ /// Returns the dispute resolution deadline (unix timestamp). 0 = no active dispute.
++ pub fn get_dispute_deadline(env: Env, job_id: u64) -> u64 {
++ let key = DataKey::Job(job_id);
++ let job: EscrowJob = env.storage().persistent().get(&key).expect("job not found");
++ Self::bump_job_ttl(&env, &key);
++ job.dispute_deadline
++ }
++
++ /// Force-expire an unresolved dispute after the deadline; refunds client.
++ pub fn expire_dispute(env: Env, job_id: u64) -> Result<(), EscrowError> {
++ Self::bump_instance_ttl(&env);
++ let config: ContractConfig = env
++ .storage()
++ .instance()
++ .get(&DataKey::Config)
++ .ok_or(EscrowError::NotInitialized)?;
++ config.agent_judge.require_auth();
++
++ let key = DataKey::Job(job_id);
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Self::bump_job_ttl(&env, &key);
++
++ if job.status != EscrowStatus::Disputed {
++ return Err(EscrowError::InvalidState);
++ }
++
++ let now = env.ledger().timestamp();
++ if job.dispute_deadline == 0 || now <= job.dispute_deadline {
++ return Err(EscrowError::InvalidState);
++ }
++
++ let remaining = job.total_amount - job.released_amount;
++ let next_status = EscrowStatus::Refunded;
++ job.status.validate_transition(&next_status)?;
++ job.released_amount = job.total_amount;
++ job.status = next_status;
++
++ let _guard = enter_reentrancy_guard(&env);
++ env.storage().persistent().set(&key, &job);
++
++ if remaining > 0 {
++ let token_client = token::Client::new(&env, &job.token);
++ token_client.transfer(&env.current_contract_address(), &job.client, &remaining);
++ }
++
++ log!(
++ &env,
++ "expire_dispute: job {} refunded {}",
++ job_id,
++ remaining
++ );
++env.storage().persistent().set(&key, &job);
++Self::bump_job_ttl(&env, &key);
++
++Self::exit_reentrancy_guard(&env);
++ env.events().publish(
++ ("escrow", "DisputeExpired"),
++ DisputeExpiredEvent {
++ job_id,
++ refunded_to: job.client,
++ amount: remaining,
++ expired_at: now,
++ },
++ );
++
++ Ok(())
++ }
++
++ /// Retrieve the status of all milestones for a given job.
++ pub fn get_milestone_status(
++ env: Env,
++ job_id: u64,
++ ) -> Result, EscrowError> {
++ let key = DataKey::Job(job_id);
++ let job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Self::bump_job_ttl(&env, &key);
++ let mut statuses = Vec::new(&env);
++ for m in job.milestones.iter() {
++ statuses.push_back(m.status);
++ }
++ Ok(statuses)
++ }
++
++ /// Retrieve the multisig configuration for a given job.
++ pub fn get_multisig_config(env: Env, job_id: u64) -> Result {
++ let config_key = DataKey::MultisigConfig(job_id);
++ let config: MultisigConfig = env
++ .storage()
++ .persistent()
++ .get(&config_key)
++ .ok_or(EscrowError::InvalidInput)?;
++ Self::bump_job_ttl(&env, &config_key);
++ Ok(config)
++ }
++
++ /// Read-only helper exposing active escrow configuration.
++ pub fn get_escrow_config(env: Env) -> Result<(Address, Address, Option), EscrowError> {
++ let config: ContractConfig = env
++ .storage()
++ .instance()
++ .get(&DataKey::Config)
++ .ok_or(EscrowError::NotInitialized)?;
++ let job_registry: Option = env.storage().instance().get(&DataKey::JobRegistry);
++ Self::bump_instance_ttl(&env);
++ Ok((config.admin, config.agent_judge, job_registry))
++ }
++
++
++
++ /// Configure multisig for a job. Only callable by client during Setup phase.
+ pub fn configure_multisig(
+ env: Env,
+ job_id: u64,
+@@ -1032,80 +1607,357 @@ impl EscrowContract {
+
+ Ok(config.current_signatures.len() >= config.required_signatures)
+ }
+-}
+
+-#[cfg(test)]
+-mod test {
+- use super::*;
+- use soroban_sdk::testutils::Address as _;
+- use soroban_sdk::{token, Address, Env};
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // SC-ESC-001: Admin fee splitting
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+
+- fn setup_token(env: &Env, admin: &Address) -> Address {
+- let contract = env.register_stellar_asset_contract_v2(admin.clone());
+- contract.address()
+- }
++ /// Admin configures the platform treasury and fee (in basis points).
++ /// Once set, milestone releases route `fee_bps` of each payout to the
++ /// treasury and the remainder to the freelancer.
++ pub fn set_fee_config(env: Env, treasury: Address, fee_bps: u32) -> Result<(), EscrowError> {
++ let config: ContractConfig = env
++ .storage()
++ .instance()
++ .get(&DataKey::Config)
++ .ok_or(EscrowError::NotInitialized)?;
++ config.admin.require_auth();
+
+- fn mint(env: &Env, token_addr: &Address, to: &Address) {
+- let admin_client = token::StellarAssetClient::new(env, token_addr);
+- admin_client.mint(to, &100_000);
+- }
++ if fee_bps > MAX_FEE_BPS {
++ return Err(EscrowError::FeeTooHigh);
++ }
+
+- #[test]
+- fn test_happy_path_lifecycle() {
+- let env = Env::default();
+- env.mock_all_auths();
++ let t_config = TreasuryConfig {
++ routing_address: treasury.clone(),
++ fee_bps,
++ };
++ env.storage().instance().set(&DataKey::Treasury, &t_config);
++ Self::bump_instance_ttl(&env);
+
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
++ env.events().publish(
++ ("escrow", "FeeConfigUpdated"),
++ FeeConfigUpdatedEvent {
++ treasury,
++ fee_bps,
++ updated_at: env.ledger().timestamp(),
++ },
++ );
+
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
++ Ok(())
++ }
+
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
++ /// Returns the active platform fee in basis points (0 when unset).
++ pub fn get_fee_bps(env: Env) -> u32 {
++ Self::bump_instance_ttl(&env);
++ if let Some(config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
++ config.fee_bps
++ } else {
++ 0
++ }
++ }
+
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &9000i128);
++ /// Returns the configured treasury address, if any.
++ pub fn get_treasury(env: Env) -> Option {
++ Self::bump_instance_ttl(&env);
++ if let Some(config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
++ Some(config.routing_address)
++ } else {
++ None
++ }
++ }
+
+- let tc = token::Client::new(&env, &token_addr);
+- assert_eq!(tc.balance(&contract_id), 9000);
++ fn exit_reentrancy_guard(env: &Env) {
++ env.storage().instance().remove(&DataKey::Locked);
++ }
+
+- cc.release_milestone(&1u64, &client);
+- assert_eq!(tc.balance(&freelancer), 3000);
++ // ─────────────────────────────────────────────────────────────────────
++ // SC-ESC-002: Dynamic lockup durations
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+
+- cc.release_milestone(&1u64, &client);
+- assert_eq!(tc.balance(&freelancer), 6000);
++ /// Client sets a custom lockup duration (in seconds) during Setup. The
++ /// job's expiry becomes `created_at + lockup_seconds`. Until expiry the
++ /// client cannot refund (see `refund`).
++ pub fn set_lockup_duration(
++ env: Env,
++ job_id: u64,
++ lockup_seconds: u64,
++ ) -> Result<(), EscrowError> {
++ let key = DataKey::Job(job_id);
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Self::bump_job_ttl(&env, &key);
+
+- cc.release_milestone(&1u64, &client);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Completed);
+- assert_eq!(tc.balance(&freelancer), 9000);
+- assert_eq!(tc.balance(&contract_id), 0);
+- }
++ job.client.require_auth();
+
+- #[test]
+- fn test_variable_milestone_amounts() {
+- let env = Env::default();
+- env.mock_all_auths();
++ if job.status != EscrowStatus::Setup {
++ return Err(EscrowError::InvalidState);
++ }
++ if lockup_seconds == 0 {
++ return Err(EscrowError::InvalidInput);
++ }
+
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
++ let expires_at = job
++ .created_at
++ .checked_add(lockup_seconds)
++ .ok_or(EscrowError::InvalidInput)?;
++ job.expires_at = expires_at;
+
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
++ env.storage().persistent().set(&key, &job);
++ Self::bump_job_ttl(&env, &key);
+
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
++ env.events().publish(
++ ("escrow", "LockupUpdated"),
++ LockupUpdatedEvent {
++ job_id,
++ expires_at,
++ updated_at: env.ledger().timestamp(),
++ },
++ );
+
+- cc.initialize(&admin, &agent_judge);
++ Ok(())
++ }
++
++ /// Returns the lockup expiry timestamp for a job.
++ pub fn get_expiry(env: Env, job_id: u64) -> Result {
++ let key = DataKey::Job(job_id);
++ let job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Ok(job.expires_at)
++ }
++
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // SC-ESC-003: Emergency escrow sweep (admin-gated)
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++
++ /// Emergency sweep of the entire locked balance for a job to a rescue
++ /// address. Only the admin may invoke this. It overrides the active state
++ /// machine and bypasses standard release rules for catastrophic recovery.
++ pub fn emergency_sweep(
++ env: Env,
++ job_id: u64,
++ rescue_address: Address,
++ ) -> Result<(), EscrowError> {
++ let config: ContractConfig = env
++ .storage()
++ .instance()
++ .get(&DataKey::Config)
++ .ok_or(EscrowError::NotInitialized)?;
++ config.admin.require_auth();
++
++ let key = DataKey::Job(job_id);
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Self::bump_job_ttl(&env, &key);
++
++ let remaining = job
++ .total_amount
++ .checked_sub(job.released_amount)
++ .ok_or(EscrowError::InvalidState)?;
++ if remaining <= 0 {
++ return Err(EscrowError::NothingToSweep);
++ }
++
++ let _guard = enter_reentrancy_guard(&env);
++
++ // Override the state machine: mark fully released and refunded.
++ job.released_amount = job.total_amount;
++ job.status = EscrowStatus::Refunded;
++
++ let token_client = token::Client::new(&env, &job.token);
++ token_client.transfer(&env.current_contract_address(), &rescue_address, &remaining);
++
++ env.storage().persistent().set(&key, &job);
++ Self::bump_job_ttl(&env, &key);
++
++ Self::exit_reentrancy_guard(&env);
++
++ env.events().publish(
++ ("escrow", "EmergencySweep"),
++ EmergencySweepEvent {
++ job_id,
++ admin: config.admin,
++ rescue_address,
++ amount: remaining,
++ swept_at: env.ledger().timestamp(),
++ },
++ );
++
++ Ok(())
++ }
++
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // SC-ESC-004: Milestone re-allocation / amendment
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++
++ /// Mutually amend the remaining (unreleased) milestone structure. Both the
++ /// client and the freelancer must authorize. The sum of the new
++ /// allocations must equal the remaining balance. Amendments are rejected
++ /// once the job is disputed.
++ pub fn amend_milestones(
++ env: Env,
++ job_id: u64,
++ new_amounts: Vec,
++ ) -> Result<(), EscrowError> {
++ let key = DataKey::Job(job_id);
++ let mut job: EscrowJob = env
++ .storage()
++ .persistent()
++ .get(&key)
++ .ok_or(EscrowError::JobNotFound)?;
++ Self::bump_job_ttl(&env, &key);
++
++ // Both parties must cryptographically authorize the restructuring.
++ job.client.require_auth();
++ job.freelancer.require_auth();
++
++ // Locked once disputed (or otherwise inactive).
++ if !(job.status == EscrowStatus::Funded || job.status == EscrowStatus::WorkInProgress) {
++ return Err(EscrowError::InvalidState);
++ }
++
++ if new_amounts.is_empty() {
++ return Err(EscrowError::InvalidInput);
++ }
++
++ let mut new_sum: i128 = 0;
++ for amount in new_amounts.iter() {
++ if amount <= 0 {
++ return Err(EscrowError::InvalidInput);
++ }
++ new_sum = new_sum
++ .checked_add(amount)
++ .ok_or(EscrowError::InvalidInput)?;
++ }
++
++ let remaining = job
++ .total_amount
++ .checked_sub(job.released_amount)
++ .ok_or(EscrowError::InvalidState)?;
++ if new_sum != remaining {
++ return Err(EscrowError::AmountMismatch);
++ }
++
++ // Preserve already-released milestones; replace the pending set.
++ let mut rebuilt: Vec = Vec::new(&env);
++ for milestone in job.milestones.iter() {
++ if milestone.status == MilestoneStatus::Released {
++ rebuilt.push_back(milestone);
++ }
++ }
++ for amount in new_amounts.iter() {
++ rebuilt.push_back(Milestone {
++ amount,
++ status: MilestoneStatus::Pending,
++ });
++ }
++ job.milestones = rebuilt;
++
++ env.storage().persistent().set(&key, &job);
++ Self::bump_job_ttl(&env, &key);
++
++ env.events().publish(
++ ("escrow", "MilestonesAmended"),
++ MilestonesAmendedEvent {
++ job_id,
++ milestone_count: new_amounts.len(),
++ remaining_amount: remaining,
++ amended_at: env.ledger().timestamp(),
++ },
++ );
++
++ Ok(())
++ }
++
++
++}
++
++#[cfg(test)]
++mod test {
++ use super::*;
++ use soroban_sdk::testutils::{Address as _, Ledger as _};
++ use soroban_sdk::{token, Address, Env};
++
++ fn setup_token(env: &Env, admin: &Address) -> Address {
++ let contract = env.register_stellar_asset_contract_v2(admin.clone());
++ contract.address()
++ }
++
++ fn mint(env: &Env, token_addr: &Address, to: &Address) {
++ let admin_client = token::StellarAssetClient::new(env, token_addr);
++ admin_client.mint(to, &100_000);
++ }
++
++ fn lock_job_for_test(env: &Env, contract_id: &Address, job_id: u64) {
++ env.as_contract(contract_id, || {
++ EscrowContract::enter_job_lock(env, job_id).unwrap();
++ });
++ }
++
++ #[test]
++ fn test_happy_path_lifecycle() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.deposit(&1u64, &9000i128);
++
++ let tc = token::Client::new(&env, &token_addr);
++ assert_eq!(tc.balance(&contract_id), 9000);
++
++ cc.release_milestone(&1u64, &client);
++ assert_eq!(tc.balance(&freelancer), 3000);
++
++ cc.release_milestone(&1u64, &client);
++ assert_eq!(tc.balance(&freelancer), 6000);
++
++ cc.release_milestone(&1u64, &client);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Completed);
++ assert_eq!(tc.balance(&freelancer), 9000);
++ assert_eq!(tc.balance(&contract_id), 0);
++ }
++
++ #[test]
++ fn test_variable_milestone_amounts() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+
+ // 3 distinct milestones with different amounts
+@@ -1187,7 +2039,685 @@ mod test {
+ }
+
+ #[test]
+- fn test_dispute_50_50_split() {
++ fn test_dispute_50_50_split() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.deposit(&1u64, &10_000i128);
++
++ cc.release_milestone(&1u64, &client);
++ let tc = token::Client::new(&env, &token_addr);
++ assert_eq!(tc.balance(&freelancer), 2500);
++
++ cc.open_dispute(&1u64, &freelancer);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Disputed);
++
++ // 50/50 split of remaining (7500): 3750 to freelancer, 3750 to client
++ cc.resolve_dispute(&1u64, &3750i128, &3750i128);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Resolved);
++ assert_eq!(tc.balance(&freelancer), 6250);
++ assert_eq!(tc.balance(&client), 93750);
++ }
++
++ #[test]
++ fn test_refund() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.deposit(&1u64, &5000i128);
++
++ assert_eq!(
++ token::Client::new(&env, &token_addr).balance(&client),
++ 95_000
++ );
++
++ // Lockup must elapse before the client can reclaim funds.
++ let expiry = cc.get_expiry(&1u64);
++ env.ledger().with_mut(|li| li.timestamp = expiry + 1);
++
++ cc.refund(&1u64, &client);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Refunded);
++ assert_eq!(
++ token::Client::new(&env, &token_addr).balance(&client),
++ 100_000
++ );
++ }
++
++ #[test]
++ // Deposit now returns EscrowError::AmountMismatch which surfaces as host
++ // error code #7.
++ #[should_panic(expected = "Error(Contract, #7)")]
++ fn test_deposit_with_wrong_total_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &500i128);
++ cc.deposit(&1u64, &1000i128);
++ }
++
++ #[test]
++ // Deposit with no milestones returns EscrowError::InvalidInput -> host
++ // error code #4.
++ #[should_panic(expected = "Error(Contract, #4)")]
++ fn test_deposit_no_milestones_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.deposit(&1u64, &1000i128);
++ }
++
++ #[test]
++ #[should_panic(expected = "milestone amount exceeds maximum")]
++ fn test_add_milestone_over_max_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++
++ cc.add_milestone(&1u64, &(EscrowContract::MAX_MILESTONE_AMOUNT + 1));
++ }
++
++ #[test]
++ #[should_panic(expected = "too many milestones")]
++ fn test_add_milestone_limit_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++
++ for _ in 0..EscrowContract::MAX_MILESTONES_PER_JOB {
++ cc.add_milestone(&1u64, &250i128);
++ }
++ cc.add_milestone(&1u64, &250i128);
++ }
++
++ #[test]
++ #[should_panic(expected = "job budget exceeds maximum")]
++ fn test_add_milestone_over_max_budget_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &10_000_000_000i128);
++ cc.add_milestone(&1u64, &1i128);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #12)")]
++ fn test_deposit_reentrancy_guard_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &1000i128);
++
++ env.as_contract(&contract_id, || {
++ env.storage().instance().set(&DataKey::Locked, &());
++ });
++ cc.deposit(&1u64, &1000i128);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #12)")]
++ fn test_release_milestone_reentrancy_guard_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &1000i128);
++ cc.deposit(&1u64, &1000i128);
++
++ env.as_contract(&contract_id, || {
++ env.storage().instance().set(&DataKey::Locked, &());
++ });
++ cc.release_milestone(&1u64, &client);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #4)")]
++ fn test_double_create_job_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++ let token_addr = Address::generate(&env);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ }
++
++ #[test]
++ fn test_exhaustive_release_funds_path() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++
++ let total_amount = 10_000i128;
++ cc.add_milestone(&1u64, &2500i128);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.add_milestone(&1u64, &2500i128);
++ cc.deposit(&1u64, &total_amount);
++
++ let tc = token::Client::new(&env, &token_addr);
++ assert_eq!(tc.balance(&contract_id), total_amount);
++
++ // Release milestones one by one in arbitrary order
++ cc.release_funds(&1u64, &client, &2u32);
++ assert_eq!(tc.balance(&freelancer), 2500);
++
++ cc.release_funds(&1u64, &client, &0u32);
++ assert_eq!(tc.balance(&freelancer), 5000);
++
++ cc.release_funds(&1u64, &client, &3u32);
++ assert_eq!(tc.balance(&freelancer), 7500);
++
++ cc.release_funds(&1u64, &client, &1u32);
++
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Completed);
++ assert_eq!(tc.balance(&freelancer), total_amount);
++ assert_eq!(tc.balance(&contract_id), 0);
++ }
++
++ #[test]
++ fn test_raise_dispute_by_client_locks_funds() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.deposit(&1u64, &9000i128);
++
++ cc.raise_dispute(&1u64, &client);
++
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Disputed);
++ }
++
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // Comprehensive Escrow Deposit & Milestone Release Tests (>90% coverage)
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++
++ #[test]
++ fn test_deposit_success_transitions_to_funded() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &5000i128);
++
++ let tc = token::Client::new(&env, &token_addr);
++ let client_balance_before = tc.balance(&client);
++
++ cc.deposit(&1u64, &5000i128);
++
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Funded);
++ assert_eq!(job.total_amount, 5000);
++ assert_eq!(tc.balance(&contract_id), 5000);
++ assert_eq!(tc.balance(&client), client_balance_before - 5000);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #6)")]
++ fn test_deposit_invalid_state_not_setup() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.deposit(&1u64, &6000i128);
++
++ // Try to deposit again when job is already Funded
++ cc.deposit(&1u64, &6000i128);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #4)")]
++ fn test_deposit_negative_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &1000i128);
++
++ cc.deposit(&1u64, &-1000i128);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #4)")]
++ fn test_deposit_zero_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &1000i128);
++
++ cc.deposit(&1u64, &0i128);
++ }
++
++ #[test]
++ fn test_release_milestone_sequential_success() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &2000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &10000i128);
++
++ let tc = token::Client::new(&env, &token_addr);
++
++ // Release first milestone
++ cc.release_milestone(&1u64, &client);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::WorkInProgress);
++ assert_eq!(job.released_amount, 2000);
++ assert_eq!(tc.balance(&freelancer), 2000);
++
++ // Release second milestone
++ cc.release_milestone(&1u64, &client);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.released_amount, 5000);
++ assert_eq!(tc.balance(&freelancer), 5000);
++
++ // Release third milestone - should complete the job
++ cc.release_milestone(&1u64, &client);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Completed);
++ assert_eq!(job.released_amount, 10000);
++ assert_eq!(tc.balance(&freelancer), 10000);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #6)")]
++ fn test_release_milestone_no_pending_milestones() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
++
++ // Release the only milestone
++ cc.release_milestone(&1u64, &client);
++
++ // Try to release again - should fail
++ cc.release_milestone(&1u64, &client);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #3)")]
++ fn test_release_milestone_unauthorized_freelancer() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
++
++ // Freelancer cannot release milestones
++ cc.release_milestone(&1u64, &freelancer);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #23)")]
++ fn test_refund_reentrant_lock_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &10_000i128);
++ cc.deposit(&1u64, &10_000i128);
++
++ lock_job_for_test(&env, &contract_id, 1);
++ cc.refund(&1u64, &client);
++ }
++
++ #[test]
++ fn test_release_funds_out_of_order() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &1000i128);
++ cc.add_milestone(&1u64, &2000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.deposit(&1u64, &6000i128);
++
++ let tc = token::Client::new(&env, &token_addr);
++
++ // Release milestones in non-sequential order
++ cc.release_funds(&1u64, &client, &2u32);
++ assert_eq!(tc.balance(&freelancer), 3000);
++
++ cc.release_funds(&1u64, &client, &0u32);
++ assert_eq!(tc.balance(&freelancer), 4000);
++
++ cc.release_funds(&1u64, &client, &1u32);
++ assert_eq!(tc.balance(&freelancer), 6000);
++
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Completed);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #4)")]
++ fn test_release_funds_invalid_index_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.deposit(&1u64, &3000i128);
++
++ cc.release_funds(&1u64, &client, &5u32);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #6)")]
++ fn test_release_funds_twice_panics() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
++
++ cc.release_funds(&1u64, &client, &0u32);
++ cc.release_funds(&1u64, &client, &0u32);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #3)")]
++ fn test_unauthorized_release_funds_by_freelancer_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1204,30 +2734,14 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.deposit(&1u64, &10_000i128);
+-
+- cc.release_milestone(&1u64, &client);
+- let tc = token::Client::new(&env, &token_addr);
+- assert_eq!(tc.balance(&freelancer), 2500);
+-
+- cc.open_dispute(&1u64, &freelancer);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
+
+- // 50/50 split of remaining (7500): 3750 to freelancer, 3750 to client
+- cc.resolve_dispute(&1u64, &3750i128, &3750i128);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Resolved);
+- assert_eq!(tc.balance(&freelancer), 6250);
+- assert_eq!(tc.balance(&client), 93750);
++ cc.release_funds(&1u64, &freelancer, &0u32);
+ }
+
+ #[test]
+- fn test_refund() {
++ fn test_deposit_event_emitted() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1244,29 +2758,18 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- assert_eq!(
+- token::Client::new(&env, &token_addr).balance(&client),
+- 95_000
+- );
++ cc.add_milestone(&1u64, &8000i128);
++ cc.deposit(&1u64, &8000i128);
+
+- cc.refund(&1u64, &client);
++ // Verify deposit was successful
+ let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Refunded);
+- assert_eq!(
+- token::Client::new(&env, &token_addr).balance(&client),
+- 100_000
+- );
++ assert_eq!(job.status, EscrowStatus::Funded);
++ assert_eq!(job.total_amount, 8000);
+ }
+
+ #[test]
+- // Deposit now returns EscrowError::AmountMismatch which surfaces as host
+- // error code #7.
+- #[should_panic(expected = "Error(Contract, #7)")]
+- fn test_deposit_with_wrong_total_panics() {
++ #[should_panic(expected = "Error(Contract, #6)")]
++ fn test_release_milestone_overflow_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1283,15 +2786,22 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &500i128);
+- cc.deposit(&1u64, &1000i128);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
++
++ // Release once
++ cc.release_milestone(&1u64, &client);
++
++ // Try to release again - no pending milestones, will fail with InvalidState
++ cc.release_milestone(&1u64, &client);
+ }
+
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // Comprehensive Escrow Dispute & Resolution Tests (>90% coverage)
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++
+ #[test]
+- // Deposit with no milestones returns EscrowError::InvalidInput -> host
+- // error code #4.
+- #[should_panic(expected = "Error(Contract, #4)")]
+- fn test_deposit_no_milestones_panics() {
++ fn test_raise_dispute_by_freelancer_locks_funds() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1308,28 +2818,45 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.deposit(&1u64, &1000i128);
++ cc.add_milestone(&1u64, &4000i128);
++ cc.add_milestone(&1u64, &6000i128);
++ cc.deposit(&1u64, &10000i128);
++
++ cc.raise_dispute(&1u64, &freelancer);
++
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Disputed);
+ }
+
+ #[test]
+- #[should_panic(expected = "job already exists")]
+- fn test_double_create_job_panics() {
++ #[should_panic(expected = "Error(Contract, #3)")]
++ fn test_raise_dispute_by_third_party_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
+ let client = Address::generate(&env);
+ let freelancer = Address::generate(&env);
+- let token_addr = Address::generate(&env);
++ let rando = Address::generate(&env);
++
++ let token_addr = setup_token(&env, &admin);
++ mint(&env, &token_addr, &client);
+
+ let contract_id = env.register_contract(None, EscrowContract);
+ let cc = EscrowContractClient::new(&env, &contract_id);
+
++ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
++
++ cc.raise_dispute(&1u64, &rando);
+ }
+
+ #[test]
+- fn test_exhaustive_release_funds_path() {
++ #[should_panic(expected = "Error(Contract, #6)")]
++ fn test_raise_dispute_on_completed_job_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1346,37 +2873,17 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
++ cc.add_milestone(&1u64, &10000i128);
++ cc.deposit(&1u64, &10000i128);
++ cc.release_milestone(&1u64, &client);
+
+- let total_amount = 10_000i128;
+- cc.add_milestone(&1u64, &2500i128);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.add_milestone(&1u64, &2500i128);
+- cc.deposit(&1u64, &total_amount);
+-
+- let tc = token::Client::new(&env, &token_addr);
+- assert_eq!(tc.balance(&contract_id), total_amount);
+-
+- // Release milestones one by one in arbitrary order
+- cc.release_funds(&1u64, &client, &2u32);
+- assert_eq!(tc.balance(&freelancer), 2500);
+-
+- cc.release_funds(&1u64, &client, &0u32);
+- assert_eq!(tc.balance(&freelancer), 5000);
+-
+- cc.release_funds(&1u64, &client, &3u32);
+- assert_eq!(tc.balance(&freelancer), 7500);
+-
+- cc.release_funds(&1u64, &client, &1u32);
+-
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Completed);
+- assert_eq!(tc.balance(&freelancer), total_amount);
+- assert_eq!(tc.balance(&contract_id), 0);
++ // Job is now Completed, cannot dispute
++ cc.raise_dispute(&1u64, &client);
+ }
+
+ #[test]
+- fn test_raise_dispute_by_client_locks_funds() {
++ #[should_panic(expected = "Error(Contract, #3)")]
++ fn test_open_dispute_by_rando_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1384,6 +2891,7 @@ mod test {
+ let agent_judge = Address::generate(&env);
+ let client = Address::generate(&env);
+ let freelancer = Address::generate(&env);
++ let rando = Address::generate(&env);
+
+ let token_addr = setup_token(&env, &admin);
+ mint(&env, &token_addr, &client);
+@@ -1393,23 +2901,15 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &9000i128);
+-
+- cc.raise_dispute(&1u64, &client);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
+
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
++ cc.open_dispute(&1u64, &rando);
+ }
+
+- // ─────────────────────────────────────────────────────────────────────────
+- // Comprehensive Escrow Deposit & Milestone Release Tests (>90% coverage)
+- // ─────────────────────────────────────────────────────────────────────────
+-
+ #[test]
+- fn test_deposit_success_transitions_to_funded() {
++ #[should_panic(expected = "Error(Contract, #6)")]
++ fn test_open_dispute_on_completed_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1427,22 +2927,15 @@ mod test {
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ cc.add_milestone(&1u64, &5000i128);
+-
+- let tc = token::Client::new(&env, &token_addr);
+- let client_balance_before = tc.balance(&client);
+-
+ cc.deposit(&1u64, &5000i128);
++ cc.release_milestone(&1u64, &client);
+
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Funded);
+- assert_eq!(job.total_amount, 5000);
+- assert_eq!(tc.balance(&contract_id), 5000);
+- assert_eq!(tc.balance(&client), client_balance_before - 5000);
++ cc.open_dispute(&1u64, &client);
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(Contract, #6)")]
+- fn test_deposit_invalid_state_not_setup() {
++ #[should_panic(expected = "Error(Contract, #23)")]
++ fn test_release_milestone_reentrant_lock_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1459,17 +2952,15 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &6000i128);
++ cc.add_milestone(&1u64, &10_000i128);
++ cc.deposit(&1u64, &10_000i128);
+
+- // Try to deposit again when job is already Funded
+- cc.deposit(&1u64, &6000i128);
++ lock_job_for_test(&env, &contract_id, 1);
++ cc.release_milestone(&1u64, &client);
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(Contract, #4)")]
+- fn test_deposit_negative_panics() {
++ fn test_resolve_dispute_success() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1486,14 +2977,32 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &1000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &4000i128);
++ cc.deposit(&1u64, &10000i128);
+
+- cc.deposit(&1u64, &-1000i128);
++ // Release one milestone first
++ cc.release_milestone(&1u64, &client);
++ let tc = token::Client::new(&env, &token_addr);
++ assert_eq!(tc.balance(&freelancer), 3000);
++
++ // Raise dispute
++ cc.raise_dispute(&1u64, &client);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Disputed);
++
++ // Resolve with 70/30 split of remaining 7000
++ cc.resolve_dispute(&1u64, &4900i128, &2100i128);
++
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Resolved);
++ assert_eq!(tc.balance(&freelancer), 7900); // 3000 + 4900
++ assert_eq!(tc.balance(&client), 92100); // 100000 - 10000 + 2100
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(Contract, #4)")]
+- fn test_deposit_zero_panics() {
++ fn test_resolve_dispute_full_refund_to_client() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1510,13 +3019,23 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &1000i128);
++ cc.add_milestone(&1u64, &8000i128);
++ cc.deposit(&1u64, &8000i128);
+
+- cc.deposit(&1u64, &0i128);
++ cc.raise_dispute(&1u64, &client);
++
++ // Full refund to client
++ cc.resolve_dispute(&1u64, &0i128, &8000i128);
++
++ let tc = token::Client::new(&env, &token_addr);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.status, EscrowStatus::Resolved);
++ assert_eq!(tc.balance(&client), 100000); // Full refund
++ assert_eq!(tc.balance(&freelancer), 0);
+ }
+
+ #[test]
+- fn test_release_milestone_sequential_success() {
++ fn test_resolve_dispute_full_payout_to_freelancer() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1533,37 +3052,23 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &2000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &10000i128);
+-
+- let tc = token::Client::new(&env, &token_addr);
++ cc.add_milestone(&1u64, &6000i128);
++ cc.deposit(&1u64, &6000i128);
+
+- // Release first milestone
+- cc.release_milestone(&1u64, &client);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::WorkInProgress);
+- assert_eq!(job.released_amount, 2000);
+- assert_eq!(tc.balance(&freelancer), 2000);
++ cc.raise_dispute(&1u64, &freelancer);
+
+- // Release second milestone
+- cc.release_milestone(&1u64, &client);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.released_amount, 5000);
+- assert_eq!(tc.balance(&freelancer), 5000);
++ // Full payout to freelancer
++ cc.resolve_dispute(&1u64, &6000i128, &0i128);
+
+- // Release third milestone - should complete the job
+- cc.release_milestone(&1u64, &client);
++ let tc = token::Client::new(&env, &token_addr);
+ let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Completed);
+- assert_eq!(job.released_amount, 10000);
+- assert_eq!(tc.balance(&freelancer), 10000);
++ assert_eq!(job.status, EscrowStatus::Resolved);
++ assert_eq!(tc.balance(&freelancer), 6000);
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(Contract, #6)")]
+- fn test_release_milestone_no_pending_milestones() {
++ #[should_panic]
++ fn test_release_funds_reentrant_lock_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1580,19 +3085,16 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- // Release the only milestone
+- cc.release_milestone(&1u64, &client);
++ cc.add_milestone(&1u64, &10_000i128);
++ cc.deposit(&1u64, &10_000i128);
+
+- // Try to release again - should fail
+- cc.release_milestone(&1u64, &client);
++ lock_job_for_test(&env, &contract_id, 1);
++ cc.release_funds(&1u64, &client, &0u32);
+ }
+
+- #[test]
+- #[should_panic(expected = "Error(Contract, #3)")]
+- fn test_release_milestone_unauthorized_freelancer() {
++ #[test]
++ #[should_panic(expected = "Error(Contract, #6)")]
++ fn test_resolve_dispute_invalid_state_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1612,12 +3114,12 @@ mod test {
+ cc.add_milestone(&1u64, &5000i128);
+ cc.deposit(&1u64, &5000i128);
+
+- // Freelancer cannot release milestones
+- cc.release_milestone(&1u64, &freelancer);
++ // Try to resolve without raising dispute first
++ cc.resolve_dispute(&1u64, &2500i128, &2500i128);
+ }
+
+ #[test]
+- fn test_release_funds_explicit_index() {
++ fn test_raise_dispute_blocks_release_funds() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1634,30 +3136,27 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &1000i128);
+- cc.add_milestone(&1u64, &2000i128);
+ cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &6000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.deposit(&1u64, &9000i128);
+
++ // Release first milestone
++ cc.release_milestone(&1u64, &client);
+ let tc = token::Client::new(&env, &token_addr);
+-
+- // Release milestones in non-sequential order
+- cc.release_funds(&1u64, &client, &2u32);
+ assert_eq!(tc.balance(&freelancer), 3000);
+
+- cc.release_funds(&1u64, &client, &0u32);
+- assert_eq!(tc.balance(&freelancer), 4000);
+-
+- cc.release_funds(&1u64, &client, &1u32);
+- assert_eq!(tc.balance(&freelancer), 6000);
++ // Raise dispute
++ cc.raise_dispute(&1u64, &freelancer);
+
++ // Verify job is in Disputed state
+ let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Completed);
++ assert_eq!(job.status, EscrowStatus::Disputed);
+ }
+
+ #[test]
+- #[should_panic(expected = "invalid milestone index")]
+- fn test_release_funds_invalid_index_panics() {
++ #[should_panic(expected = "Error(Contract, #3)")]
++ fn test_refund_by_non_client_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1674,41 +3173,31 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
+
+- cc.release_funds(&1u64, &client, &5u32);
++ // Freelancer cannot refund
++ cc.refund(&1u64, &freelancer);
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(WasmVm, InvalidAction)")]
+- fn test_release_funds_twice_panics() {
++ #[should_panic(expected = "Error(Contract, #5)")]
++ fn test_get_job_not_found_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+ let admin = Address::generate(&env);
+ let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+
+ let contract_id = env.register_contract(None, EscrowContract);
+ let cc = EscrowContractClient::new(&env, &contract_id);
+
+ cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+-
+- cc.release_funds(&1u64, &client, &0u32);
+- cc.release_funds(&1u64, &client, &0u32);
++ cc.get_job(&999u64);
+ }
+
+ #[test]
+- #[should_panic(expected = "only client can release")]
+- fn test_unauthorized_release_funds_by_freelancer_panics() {
++ fn test_cancel_brief_in_setup_marks_refunded_without_transfer() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1716,23 +3205,22 @@ mod test {
+ let agent_judge = Address::generate(&env);
+ let client = Address::generate(&env);
+ let freelancer = Address::generate(&env);
+-
+ let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+
+ let contract_id = env.register_contract(None, EscrowContract);
+ let cc = EscrowContractClient::new(&env, &contract_id);
+
+ cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
++ cc.create_job(&77u64, &client, &freelancer, &token_addr);
++ cc.cancel_brief(&77u64, &client);
+
+- cc.release_funds(&1u64, &freelancer, &0u32);
++ let job = cc.get_job(&77u64);
++ assert_eq!(job.status, EscrowStatus::Refunded);
++ assert_eq!(job.released_amount, 0);
+ }
+
+ #[test]
+- fn test_deposit_event_emitted() {
++ fn test_dispute_event_emission() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1749,18 +3237,23 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &8000i128);
+- cc.deposit(&1u64, &8000i128);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
+
+- // Verify deposit was successful
++ // Raise dispute and verify state
++ cc.raise_dispute(&1u64, &client);
+ let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Funded);
+- assert_eq!(job.total_amount, 8000);
++ assert_eq!(job.status, EscrowStatus::Disputed);
++ assert_eq!(job.total_amount, 5000);
++ assert_eq!(job.released_amount, 0);
+ }
+
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // SC-ESC-005: Token Decimals Compatibility
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++
+ #[test]
+- #[should_panic(expected = "Error(Contract, #6)")]
+- fn test_release_milestone_overflow_panics() {
++ fn test_token_decimals_stored_on_deposit() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1780,48 +3273,56 @@ mod test {
+ cc.add_milestone(&1u64, &5000i128);
+ cc.deposit(&1u64, &5000i128);
+
+- // Release once
+- cc.release_milestone(&1u64, &client);
+-
+- // Try to release again - no pending milestones, will fail with InvalidState
+- cc.release_milestone(&1u64, &client);
++ // Stellar asset contract has 7 decimals; verify captured during deposit
++ assert_eq!(cc.get_token_decimals(&1u64), 7);
+ }
+
+- // ─────────────────────────────────────────────────────────────────────────
+- // Comprehensive Escrow Dispute & Resolution Tests (>90% coverage)
+- // ─────────────────────────────────────────────────────────────────────────
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // SC-ESC-007: Instance Storage Optimisation
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
+
+ #[test]
+- fn test_raise_dispute_by_freelancer_locks_funds() {
++ fn test_instance_config_getters() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+ let admin = Address::generate(&env);
+ let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+-
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+
+ let contract_id = env.register_contract(None, EscrowContract);
+ let cc = EscrowContractClient::new(&env, &contract_id);
+
+ cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &4000i128);
+- cc.add_milestone(&1u64, &6000i128);
+- cc.deposit(&1u64, &10000i128);
++ assert_eq!(cc.get_admin(), admin);
++ assert_eq!(cc.get_agent_judge(), agent_judge);
++ }
+
+- cc.raise_dispute(&1u64, &freelancer);
++ #[test]
++ fn test_set_agent_judge_updates_packed_config() {
++ let env = Env::default();
++ env.mock_all_auths();
+
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
++ let admin = Address::generate(&env);
++ let agent_judge = Address::generate(&env);
++ let new_judge = Address::generate(&env);
++
++ let contract_id = env.register_contract(None, EscrowContract);
++ let cc = EscrowContractClient::new(&env, &contract_id);
++
++ cc.initialize(&admin, &agent_judge);
++ cc.set_agent_judge(&new_judge);
++
++ assert_eq!(cc.get_agent_judge(), new_judge);
++ assert_eq!(cc.get_admin(), admin);
+ }
+
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // SC-ESC-008: Double-Spending Prevention
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++
+ #[test]
+- #[should_panic(expected = "unauthorized: only client or freelancer can raise a dispute")]
+- fn test_raise_dispute_by_third_party_panics() {
++ #[should_panic(expected = "Error(Contract, #6)")]
++ fn test_double_release_milestone_is_blocked() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1829,7 +3330,6 @@ mod test {
+ let agent_judge = Address::generate(&env);
+ let client = Address::generate(&env);
+ let freelancer = Address::generate(&env);
+- let rando = Address::generate(&env);
+
+ let token_addr = setup_token(&env, &admin);
+ mint(&env, &token_addr, &client);
+@@ -1842,12 +3342,13 @@ mod test {
+ cc.add_milestone(&1u64, &5000i128);
+ cc.deposit(&1u64, &5000i128);
+
+- cc.raise_dispute(&1u64, &rando);
++ cc.release_milestone(&1u64, &client);
++ // Job is now Completed; status guard fires first -> InvalidState (#6)
++ cc.release_milestone(&1u64, &client);
+ }
+
+ #[test]
+- #[should_panic(expected = "dispute cannot be raised: job is not in active state")]
+- fn test_raise_dispute_on_completed_job_panics() {
++ fn test_released_amount_matches_transferred_on_sequential_release() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1864,17 +3365,28 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &10000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &3000i128);
++ cc.add_milestone(&1u64, &4000i128);
+ cc.deposit(&1u64, &10000i128);
++
++ let tc = token::Client::new(&env, &token_addr);
++
+ cc.release_milestone(&1u64, &client);
++ assert_eq!(cc.get_job(&1u64).released_amount, tc.balance(&freelancer));
+
+- // Job is now Completed, cannot dispute
+- cc.raise_dispute(&1u64, &client);
++ cc.release_milestone(&1u64, &client);
++ assert_eq!(cc.get_job(&1u64).released_amount, tc.balance(&freelancer));
++
++ cc.release_milestone(&1u64, &client);
++ let job = cc.get_job(&1u64);
++ assert_eq!(job.released_amount, job.total_amount);
++ assert_eq!(job.released_amount, tc.balance(&freelancer));
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(Contract, #3)")]
+- fn test_open_dispute_by_rando_panics() {
++ #[should_panic(expected = "Error(Contract, #12)")]
++ fn test_reentrant_release_milestone_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1882,7 +3394,6 @@ mod test {
+ let agent_judge = Address::generate(&env);
+ let client = Address::generate(&env);
+ let freelancer = Address::generate(&env);
+- let rando = Address::generate(&env);
+
+ let token_addr = setup_token(&env, &admin);
+ mint(&env, &token_addr, &client);
+@@ -1895,12 +3406,15 @@ mod test {
+ cc.add_milestone(&1u64, &5000i128);
+ cc.deposit(&1u64, &5000i128);
+
+- cc.open_dispute(&1u64, &rando);
++ env.as_contract(&contract_id, || {
++ env.storage().instance().set(&DataKey::Locked, &());
++ });
++ cc.release_milestone(&1u64, &client);
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(Contract, #6)")]
+- fn test_open_dispute_on_completed_panics() {
++ #[should_panic(expected = "Error(Contract, #12)")]
++ fn test_reentrant_release_funds_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1919,13 +3433,16 @@ mod test {
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+ cc.add_milestone(&1u64, &5000i128);
+ cc.deposit(&1u64, &5000i128);
+- cc.release_milestone(&1u64, &client);
+
+- cc.open_dispute(&1u64, &client);
++ env.as_contract(&contract_id, || {
++ env.storage().instance().set(&DataKey::Locked, &());
++ });
++ cc.release_funds(&1u64, &client, &0u32);
+ }
+
+ #[test]
+- fn test_raise_dispute_then_resolve() {
++ #[should_panic(expected = "Error(Contract, #12)")]
++ fn test_reentrant_refund_panics() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1942,32 +3459,21 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &4000i128);
+- cc.deposit(&1u64, &10000i128);
+-
+- // Release one milestone first
+- cc.release_milestone(&1u64, &client);
+- let tc = token::Client::new(&env, &token_addr);
+- assert_eq!(tc.balance(&freelancer), 3000);
+-
+- // Raise dispute
+- cc.raise_dispute(&1u64, &client);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
+-
+- // Resolve with 70/30 split of remaining 7000
+- cc.resolve_dispute(&1u64, &4900i128, &2100i128);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
+
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Resolved);
+- assert_eq!(tc.balance(&freelancer), 7900); // 3000 + 4900
+- assert_eq!(tc.balance(&client), 92100); // 100000 - 10000 + 2100
++ env.as_contract(&contract_id, || {
++ env.storage().instance().set(&DataKey::Locked, &());
++ });
++ cc.refund(&1u64, &client);
+ }
+
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++ // SC-ESC-009: Dispute Timeout Enforcement
++ // ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
++
+ #[test]
+- fn test_resolve_dispute_full_refund_to_client() {
++ fn test_dispute_deadline_set_on_raise() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -1984,23 +3490,17 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &8000i128);
+- cc.deposit(&1u64, &8000i128);
++ cc.add_milestone(&1u64, &5000i128);
++ cc.deposit(&1u64, &5000i128);
+
++ let ts_before = env.ledger().timestamp();
+ cc.raise_dispute(&1u64, &client);
+
+- // Full refund to client
+- cc.resolve_dispute(&1u64, &0i128, &8000i128);
+-
+- let tc = token::Client::new(&env, &token_addr);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Resolved);
+- assert_eq!(tc.balance(&client), 100000); // Full refund
+- assert_eq!(tc.balance(&freelancer), 0);
++ assert_eq!(cc.get_dispute_deadline(&1u64), ts_before + 7 * 24 * 60 * 60);
+ }
+
+ #[test]
+- fn test_resolve_dispute_full_payout_to_freelancer() {
++ fn test_resolve_before_deadline_succeeds() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -2020,20 +3520,18 @@ mod test {
+ cc.add_milestone(&1u64, &6000i128);
+ cc.deposit(&1u64, &6000i128);
+
+- cc.raise_dispute(&1u64, &freelancer);
++ cc.raise_dispute(&1u64, &client);
+
+- // Full payout to freelancer
+- cc.resolve_dispute(&1u64, &6000i128, &0i128);
++ env.ledger()
++ .set_timestamp(env.ledger().timestamp() + 3 * 24 * 60 * 60);
+
+- let tc = token::Client::new(&env, &token_addr);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Resolved);
+- assert_eq!(tc.balance(&freelancer), 6000);
++ cc.resolve_dispute(&1u64, &6000i128, &0i128);
++ assert_eq!(cc.get_job(&1u64).status, EscrowStatus::Resolved);
+ }
+
+ #[test]
+- #[should_panic(expected = "job not disputed")]
+- fn test_resolve_dispute_not_disputed_panics() {
++ #[should_panic(expected = "Error(Contract, #20)")]
++ fn test_resolve_after_deadline_fails() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -2053,12 +3551,15 @@ mod test {
+ cc.add_milestone(&1u64, &5000i128);
+ cc.deposit(&1u64, &5000i128);
+
+- // Try to resolve without raising dispute first
+- cc.resolve_dispute(&1u64, &2500i128, &2500i128);
++ cc.raise_dispute(&1u64, &client);
++ env.ledger()
++ .set_timestamp(env.ledger().timestamp() + 8 * 24 * 60 * 60);
++
++ cc.resolve_dispute(&1u64, &5000i128, &0i128); // DisputeResolutionExpired (#18)
+ }
+
+ #[test]
+- fn test_raise_dispute_blocks_release_funds() {
++ fn test_expire_dispute_refunds_client_after_deadline() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -2075,68 +3576,31 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.add_milestone(&1u64, &3000i128);
+- cc.deposit(&1u64, &9000i128);
++ cc.add_milestone(&1u64, &8000i128);
++ cc.deposit(&1u64, &8000i128);
+
+- // Release first milestone
+- cc.release_milestone(&1u64, &client);
+ let tc = token::Client::new(&env, &token_addr);
+- assert_eq!(tc.balance(&freelancer), 3000);
+-
+- // Raise dispute
+- cc.raise_dispute(&1u64, &freelancer);
+-
+- // Verify job is in Disputed state
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
+- }
+-
+- #[test]
+- #[should_panic(expected = "Error(Contract, #3)")]
+- fn test_refund_by_non_client_panics() {
+- let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+- let client = Address::generate(&env);
+- let freelancer = Address::generate(&env);
++ assert_eq!(tc.balance(&client), 92000);
+
+- let token_addr = setup_token(&env, &admin);
+- mint(&env, &token_addr, &client);
+-
+- let contract_id = env.register_contract(None, EscrowContract);
+- let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
++ cc.raise_dispute(&1u64, &client);
++ env.ledger()
++ .set_timestamp(env.ledger().timestamp() + 8 * 24 * 60 * 60);
+
+- // Freelancer cannot refund
+- cc.refund(&1u64, &freelancer);
++ cc.expire_dispute(&1u64);
++ assert_eq!(cc.get_job(&1u64).status, EscrowStatus::Refunded);
++ assert_eq!(tc.balance(&client), 100000);
+ }
+
+ #[test]
+- #[should_panic(expected = "job not found")]
+- fn test_get_job_not_found_panics() {
++ fn test_version() {
+ let env = Env::default();
+- env.mock_all_auths();
+-
+- let admin = Address::generate(&env);
+- let agent_judge = Address::generate(&env);
+-
+ let contract_id = env.register_contract(None, EscrowContract);
+ let cc = EscrowContractClient::new(&env, &contract_id);
+-
+- cc.initialize(&admin, &agent_judge);
+- cc.get_job(&999u64);
++ assert_eq!(cc.version(), 1);
+ }
+
+ #[test]
+- fn test_dispute_event_emission() {
++ fn test_get_multisig_config() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+@@ -2144,6 +3608,8 @@ mod test {
+ let agent_judge = Address::generate(&env);
+ let client = Address::generate(&env);
+ let freelancer = Address::generate(&env);
++ let signer1 = Address::generate(&env);
++ let signer2 = Address::generate(&env);
+
+ let token_addr = setup_token(&env, &admin);
+ mint(&env, &token_addr, &client);
+@@ -2153,14 +3619,12 @@ mod test {
+
+ cc.initialize(&admin, &agent_judge);
+ cc.create_job(&1u64, &client, &freelancer, &token_addr);
+- cc.add_milestone(&1u64, &5000i128);
+- cc.deposit(&1u64, &5000i128);
+
+- // Raise dispute and verify state
+- cc.raise_dispute(&1u64, &client);
+- let job = cc.get_job(&1u64);
+- assert_eq!(job.status, EscrowStatus::Disputed);
+- assert_eq!(job.total_amount, 5000);
+- assert_eq!(job.released_amount, 0);
++ let signers = soroban_sdk::vec![&env, signer1.clone(), signer2.clone()];
++ cc.configure_multisig(&1u64, &signers, &2u32);
++
++ let config = cc.get_multisig_config(&1u64);
++ assert_eq!(config.required_signatures, 2);
++ assert_eq!(config.signers.len(), 2);
+ }
+ }
+diff --git a/contracts/escrow/test_output.log b/contracts/escrow/test_output.log
+new file mode 100644
+index 0000000..78b4ab3
+--- /dev/null
++++ b/contracts/escrow/test_output.log
+@@ -0,0 +1,338 @@
++warning: unused variable: `job_id`
++ --> contracts/escrow/src/lib.rs:375:35
++ |
++375 | ...yout_with_fee(env: &Env, job_id: u64, job: &EscrowJob, amount: i128)...
++ | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_job_id`
++ |
++ = note: `#[warn(unused_variables)]` on by default
++
++warning: variable does not need to be mutable
++ --> contracts/escrow/src/lib.rs:1178:13
++ |
++1178 | let mut job: EscrowJob = env
++ | ----^^^
++ | |
++ | help: remove this `mut`
++ |
++ = note: `#[warn(unused_mut)]` on by default
++
++warning: `escrow` (lib) generated 2 warnings (run `cargo fix --lib -p escrow` to apply 1 suggestion)
++warning: `escrow` (lib test) generated 2 warnings (2 duplicates)
++ Finished `test` profile [unoptimized + debuginfo] target(s) in 0.81s
++ Running unittests src/lib.rs (/home/kaycee/Desktop/OS/lance/target/debug/deps/escrow-28de2df4515832fa)
++
++running 60 tests
++test test::test_cancel_brief_in_setup_marks_refunded_without_transfer ... ok
++test test::test_deposit_event_emitted ... ok
++test test::test_add_milestone_over_max_panics - should panic ... ok
++test test::test_add_milestone_over_max_budget_panics - should panic ... ok
++test test::test_deposit_invalid_state_not_setup - should panic ... ok
++test test::test_deposit_no_milestones_panics - should panic ... ok
++test test::test_deposit_negative_panics - should panic ... ok
++test test::test_add_milestone_limit_panics - should panic ... ok
++test test::test_deposit_success_transitions_to_funded ... ok
++test test::test_deposit_with_wrong_total_panics - should panic ... ok
++test test::test_deposit_zero_panics - should panic ... ok
++test test::test_deposit_reentrancy_guard_panics - should panic ... ok
++test test::test_dispute_deadline_set_on_raise ... ok
++test test::test_double_create_job_panics - should panic ... ok
++test test::test_deposit_with_wrong_total_panics_2 - should panic ... FAILED
++test test::test_double_init - should panic ... ok
++test test::test_dispute_event_emission ... ok
++test test::test_double_release_milestone_is_blocked - should panic ... ok
++test test::test_expire_dispute_refunds_client_after_deadline ... ok
++test test::test_dispute_50_50_split ... ok
++test test::test_get_job_not_found_panics - should panic ... ok
++test test::test_instance_config_getters ... ok
++test test::test_get_multisig_config ... ok
++test test::test_open_dispute_on_completed_panics - should panic ... ok
++test test::test_open_dispute_by_rando_panics - should panic ... ok
++test test::test_exhaustive_release_funds_path ... ok
++test test::test_raise_dispute_by_freelancer_locks_funds ... ok
++test test::test_happy_path_lifecycle ... ok
++test test::test_raise_dispute_blocks_release_funds ... ok
++test test::test_raise_dispute_by_client_locks_funds ... ok
++test test::test_reentrant_refund_panics - should panic ... FAILED
++test test::test_raise_dispute_by_third_party_panics - should panic ... ok
++test test::test_raise_dispute_on_completed_job_panics - should panic ... ok
++test test::test_refund ... FAILED
++test test::test_reentrant_release_funds_panics - should panic ... ok
++test test::test_refund_reentrant_lock_panics - should panic ... FAILED
++test test::test_release_funds_invalid_index_panics_2 - should panic ... FAILED
++test test::test_reentrant_release_milestone_panics - should panic ... ok
++test test::test_refund_by_non_client_panics - should panic ... ok
++test test::test_release_funds_reentrant_lock_panics - should panic ... ok
++test test::test_release_funds_invalid_index_panics - should panic ... ok
++test test::test_release_funds_twice_panics - should panic ... ok
++test test::test_release_milestone_no_pending_milestones - should panic ... ok
++test test::test_release_milestone_reentrancy_guard_panics - should panic ... ok
++test test::test_release_milestone_overflow_panics - should panic ... ok
++test test::test_release_milestone_reentrant_lock_panics - should panic ... FAILED
++test test::test_release_milestone_unauthorized_freelancer - should panic ... ok
++test test::test_resolve_after_deadline_fails - should panic ... ok
++test test::test_released_amount_matches_transferred_on_sequential_release ... ok
++test test::test_release_milestone_sequential_success ... ok
++test test::test_resolve_before_deadline_succeeds ... ok
++test test::test_set_agent_judge_updates_packed_config ... ok
++test test::test_resolve_dispute_full_payout_to_freelancer ... ok
++test test::test_token_decimals_stored_on_deposit ... ok
++test test::test_resolve_dispute_panics - should panic ... FAILED
++test test::test_resolve_dispute_full_refund_to_client ... ok
++test test::test_version ... ok
++test test::test_unauthorized_release - should panic ... ok
++test test::test_unauthorized_release_funds_by_freelancer_panics - should panic ... ok
++test test::test_variable_milestone_amounts ... ok
++
++failures:
++
++---- test::test_deposit_with_wrong_total_panics_2 stdout ----
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 1000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 2000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 3000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 6000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["release_funds: job {} amount {}", 1, 3000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["release_funds: job {} amount {}", 1, 1000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["release_funds: job {} amount {}", 1, 2000]
++Writing test snapshot file for test "test::test_deposit_with_wrong_total_panics_2" to "test_snapshots/test/test_deposit_with_wrong_total_panics_2.1.json".
++note: test did not panic as expected at contracts/escrow/src/lib.rs:2628:8
++---- test::test_reentrant_refund_panics stdout ----
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 5000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 5000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["refund: job {} amount {}", 1, 5000]
++Writing test snapshot file for test "test::test_reentrant_refund_panics" to "test_snapshots/test/test_reentrant_refund_panics.1.json".
++note: test did not panic as expected at contracts/escrow/src/lib.rs:3445:8
++---- test::test_refund stdout ----
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 2500]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 2500]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 5000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["refund: job {} amount {}", 1, 5000]
++
++thread 'test::test_refund' panicked at contracts/escrow/src/lib.rs:2110:9:
++assertion `left == right` failed
++ left: Funded
++ right: Refunded
++Writing test snapshot file for test "test::test_refund" to "test_snapshots/test/test_refund.1.json".
++
++---- test::test_refund_reentrant_lock_panics stdout ----
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 10000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
++
++thread 'test::test_refund_reentrant_lock_panics' panicked at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:768:9:
++HostError: Error(Contract, #23)
++
++Event log (newest first):
++ 0: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:"escalating error to panic"
++ 1: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:["contract call failed", refund, [1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]]
++ 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #23)], data:"escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, refund], data:Error(Contract, #23)
++ 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), refund], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]
++ 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void
++ 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Deposit"], data:{amount: 10000, deposited_at: 0, job_id: 1}
++ 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
++ 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void
++ 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"], data:10000
++ 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 10000]
++ 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7
++ 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void
++ 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 10000]
++ 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void
++ 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 10000]
++ 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 10000]
++ 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void
++ 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++ 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]
++ 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void
++ 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Initialized"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]
++ 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++ 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++ 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void
++ 25: ... 7 events elided ...
++
++Backtrace (newest first):
++ 0: ::escalate_error_to_panic
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31
++ 1: soroban_sdk::env::internal::reject_err::{{closure}}
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27
++ 2: core::result::Result::map_err
++ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27
++ 3: soroban_sdk::env::internal::reject_err
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11
++ 4: ::call
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13
++ 5: soroban_sdk::env::Env::invoke_contract
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18
++ 6: escrow::EscrowContractClient::refund
++ at src/lib.rs:335:1
++ 7: escrow::test::test_refund_reentrant_lock_panics
++ at src/lib.rs:2621:12
++ 8: escrow::test::test_refund_reentrant_lock_panics::{{closure}}
++ at src/lib.rs:2600:43
++ 9: core::ops::function::FnOnce::call_once
++ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5
++
++
++Writing test snapshot file for test "test::test_refund_reentrant_lock_panics" to "test_snapshots/test/test_refund_reentrant_lock_panics.1.json".
++note: panic did not contain expected string
++ panic message: "HostError: Error(Contract, #23)\n\nEvent log (newest first):\n 0: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:\"escalating error to panic\"\n 1: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:[\"contract call failed\", refund, [1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]]\n 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #23)], data:\"escalating Ok(ScErrorType::Contract) frame-exit to Err\"\n 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, refund], data:Error(Contract, #23)\n 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), refund], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]\n 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void\n 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Deposit\"], data:{amount: 10000, deposited_at: 0, job_id: 1}\n 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"deposit: job {} amount {}\", 1, 10000]\n 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void\n 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, \"aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV\"], data:10000\n 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 10000]\n 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7\n 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void\n 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 10000]\n 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void\n 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"add_milestone: job {} amount {}\", 1, 10000]\n 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 10000]\n 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void\n 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"create_job: id {} client {} freelancer {}\", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]\n 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]\n 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void\n 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Initialized\"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]\n 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"Escrow initialized with admin: {} and agent_judge: {}\", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void\n 25: ... 7 events elided ...\n\nBacktrace (newest first):\n 0: ::escalate_error_to_panic\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31\n 1: soroban_sdk::env::internal::reject_err::{{closure}}\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27\n 2: core::result::Result::map_err\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27\n 3: soroban_sdk::env::internal::reject_err\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11\n 4: ::call\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13\n 5: soroban_sdk::env::Env::invoke_contract\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18\n 6: escrow::EscrowContractClient::refund\n at src/lib.rs:335:1\n 7: escrow::test::test_refund_reentrant_lock_panics\n at src/lib.rs:2621:12\n 8: escrow::test::test_refund_reentrant_lock_panics::{{closure}}\n at src/lib.rs:2600:43\n 9: core::ops::function::FnOnce::call_once\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5\n\n"
++ expected substring: "Error(Contract, #11)"
++---- test::test_release_funds_invalid_index_panics_2 stdout ----
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 5000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 5000]
++
++thread 'test::test_release_funds_invalid_index_panics_2' panicked at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:768:9:
++HostError: Error(Contract, #6)
++
++Event log (newest first):
++ 0: [Diagnostic Event] topics:[error, Error(Contract, #6)], data:"escalating error to panic"
++ 1: [Diagnostic Event] topics:[error, Error(Contract, #6)], data:["contract call failed", resolve_dispute, [1, 2500, 2500]]
++ 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #6)], data:"escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, resolve_dispute], data:Error(Contract, #6)
++ 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), resolve_dispute], data:[1, 2500, 2500]
++ 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void
++ 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Deposit"], data:{amount: 5000, deposited_at: 0, job_id: 1}
++ 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 5000]
++ 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void
++ 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"], data:5000
++ 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 5000]
++ 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7
++ 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void
++ 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 5000]
++ 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void
++ 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 5000]
++ 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 5000]
++ 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void
++ 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++ 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]
++ 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void
++ 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Initialized"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]
++ 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++ 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++ 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void
++ 25: ... 7 events elided ...
++
++Backtrace (newest first):
++ 0: ::escalate_error_to_panic
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31
++ 1: soroban_sdk::env::internal::reject_err::{{closure}}
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27
++ 2: core::result::Result::map_err
++ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27
++ 3: soroban_sdk::env::internal::reject_err
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11
++ 4: ::call
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13
++ 5: soroban_sdk::env::Env::invoke_contract
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18
++ 6: escrow::EscrowContractClient::resolve_dispute
++ at src/lib.rs:335:1
++ 7: escrow::test::test_release_funds_invalid_index_panics_2
++ at src/lib.rs:3118:12
++ 8: escrow::test::test_release_funds_invalid_index_panics_2::{{closure}}
++ at src/lib.rs:3097:51
++ 9: core::ops::function::FnOnce::call_once
++ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5
++
++
++Writing test snapshot file for test "test::test_release_funds_invalid_index_panics_2" to "test_snapshots/test/test_release_funds_invalid_index_panics_2.1.json".
++note: panic did not contain expected string
++ panic message: "HostError: Error(Contract, #6)\n\nEvent log (newest first):\n 0: [Diagnostic Event] topics:[error, Error(Contract, #6)], data:\"escalating error to panic\"\n 1: [Diagnostic Event] topics:[error, Error(Contract, #6)], data:[\"contract call failed\", resolve_dispute, [1, 2500, 2500]]\n 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #6)], data:\"escalating Ok(ScErrorType::Contract) frame-exit to Err\"\n 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, resolve_dispute], data:Error(Contract, #6)\n 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), resolve_dispute], data:[1, 2500, 2500]\n 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void\n 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Deposit\"], data:{amount: 5000, deposited_at: 0, job_id: 1}\n 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"deposit: job {} amount {}\", 1, 5000]\n 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void\n 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, \"aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV\"], data:5000\n 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 5000]\n 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7\n 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void\n 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 5000]\n 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void\n 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"add_milestone: job {} amount {}\", 1, 5000]\n 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 5000]\n 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void\n 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"create_job: id {} client {} freelancer {}\", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]\n 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]\n 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void\n 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Initialized\"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]\n 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"Escrow initialized with admin: {} and agent_judge: {}\", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void\n 25: ... 7 events elided ...\n\nBacktrace (newest first):\n 0: ::escalate_error_to_panic\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31\n 1: soroban_sdk::env::internal::reject_err::{{closure}}\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27\n 2: core::result::Result::map_err\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27\n 3: soroban_sdk::env::internal::reject_err\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11\n 4: ::call\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13\n 5: soroban_sdk::env::Env::invoke_contract\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18\n 6: escrow::EscrowContractClient::resolve_dispute\n at src/lib.rs:335:1\n 7: escrow::test::test_release_funds_invalid_index_panics_2\n at src/lib.rs:3118:12\n 8: escrow::test::test_release_funds_invalid_index_panics_2::{{closure}}\n at src/lib.rs:3097:51\n 9: core::ops::function::FnOnce::call_once\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5\n\n"
++ expected substring: "invalid milestone index"
++---- test::test_release_milestone_reentrant_lock_panics stdout ----
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 10000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
++
++thread 'test::test_release_milestone_reentrant_lock_panics' panicked at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:768:9:
++HostError: Error(Contract, #23)
++
++Event log (newest first):
++ 0: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:"escalating error to panic"
++ 1: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:["contract call failed", release_milestone, [1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]]
++ 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #23)], data:"escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, release_milestone], data:Error(Contract, #23)
++ 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), release_milestone], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]
++ 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void
++ 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Deposit"], data:{amount: 10000, deposited_at: 0, job_id: 1}
++ 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
++ 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void
++ 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"], data:10000
++ 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 10000]
++ 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7
++ 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void
++ 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 10000]
++ 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void
++ 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 10000]
++ 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 10000]
++ 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void
++ 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++ 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]
++ 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void
++ 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Initialized"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]
++ 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++ 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++ 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void
++ 25: ... 7 events elided ...
++
++Backtrace (newest first):
++ 0: ::escalate_error_to_panic
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31
++ 1: soroban_sdk::env::internal::reject_err::{{closure}}
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27
++ 2: core::result::Result::map_err
++ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27
++ 3: soroban_sdk::env::internal::reject_err
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11
++ 4: ::call
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13
++ 5: soroban_sdk::env::Env::invoke_contract
++ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18
++ 6: escrow::EscrowContractClient::release_milestone
++ at src/lib.rs:335:1
++ 7: escrow::test::test_release_milestone_reentrant_lock_panics
++ at src/lib.rs:2958:12
++ 8: escrow::test::test_release_milestone_reentrant_lock_panics::{{closure}}
++ at src/lib.rs:2937:54
++ 9: core::ops::function::FnOnce::call_once
++ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5
++
++
++Writing test snapshot file for test "test::test_release_milestone_reentrant_lock_panics" to "test_snapshots/test/test_release_milestone_reentrant_lock_panics.1.json".
++note: panic did not contain expected string
++ panic message: "HostError: Error(Contract, #23)\n\nEvent log (newest first):\n 0: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:\"escalating error to panic\"\n 1: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:[\"contract call failed\", release_milestone, [1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]]\n 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #23)], data:\"escalating Ok(ScErrorType::Contract) frame-exit to Err\"\n 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, release_milestone], data:Error(Contract, #23)\n 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), release_milestone], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]\n 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void\n 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Deposit\"], data:{amount: 10000, deposited_at: 0, job_id: 1}\n 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"deposit: job {} amount {}\", 1, 10000]\n 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void\n 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, \"aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV\"], data:10000\n 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 10000]\n 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7\n 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void\n 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 10000]\n 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void\n 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"add_milestone: job {} amount {}\", 1, 10000]\n 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 10000]\n 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void\n 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"create_job: id {} client {} freelancer {}\", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]\n 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]\n 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void\n 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Initialized\"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]\n 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"Escrow initialized with admin: {} and agent_judge: {}\", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void\n 25: ... 7 events elided ...\n\nBacktrace (newest first):\n 0: ::escalate_error_to_panic\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31\n 1: soroban_sdk::env::internal::reject_err::{{closure}}\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27\n 2: core::result::Result::map_err\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27\n 3: soroban_sdk::env::internal::reject_err\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11\n 4: ::call\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13\n 5: soroban_sdk::env::Env::invoke_contract\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18\n 6: escrow::EscrowContractClient::release_milestone\n at src/lib.rs:335:1\n 7: escrow::test::test_release_milestone_reentrant_lock_panics\n at src/lib.rs:2958:12\n 8: escrow::test::test_release_milestone_reentrant_lock_panics::{{closure}}\n at src/lib.rs:2937:54\n 9: core::ops::function::FnOnce::call_once\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5\n\n"
++ expected substring: "Error(Contract, #11)"
++---- test::test_resolve_dispute_panics stdout ----
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 3000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 3000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 4000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["release_milestone: job {} amount {}", 1, 3000]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["raise_dispute: job {}", 1]
++[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["resolve_dispute: job {} payee {} payer {}", 1, 4900, 2100]
++Writing test snapshot file for test "test::test_resolve_dispute_panics" to "test_snapshots/test/test_resolve_dispute_panics.1.json".
++note: test did not panic as expected at contracts/escrow/src/lib.rs:2963:8
++
++failures:
++ test::test_deposit_with_wrong_total_panics_2
++ test::test_reentrant_refund_panics
++ test::test_refund
++ test::test_refund_reentrant_lock_panics
++ test::test_release_funds_invalid_index_panics_2
++ test::test_release_milestone_reentrant_lock_panics
++ test::test_resolve_dispute_panics
++
++test result: FAILED. 53 passed; 7 failed; 0 ignored; 0 measured; 0 filtered out; finished in 18.50s
++
++error: test failed, to rerun pass `--lib`
+diff --git a/contracts/escrow/test_snapshots/test/test_add_milestone_limit_panics.1.json b/contracts/escrow/test_snapshots/test/test_add_milestone_limit_panics.1.json
+new file mode 100644
+index 0000000..bed749f
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_add_milestone_limit_panics.1.json
+@@ -0,0 +1,6889 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 544730322382084885
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 544730322382084885
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1301173170172112462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1301173170172112462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1345255804540566779
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1345255804540566779
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1501277168746644712
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1501277168746644712
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1506441561184340186
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1506441561184340186
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1690253666352074432
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1690253666352074432
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2140788761963629343
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2140788761963629343
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2254425974100219774
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2254425974100219774
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2307661404550649928
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2307661404550649928
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2578412842719982537
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2578412842719982537
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2623024502929126324
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2623024502929126324
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2781962168096793370
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2781962168096793370
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2891388370666955040
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2891388370666955040
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 3126073502131104533
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 3126073502131104533
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 3736142932239307322
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 3736142932239307322
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4571470874178140630
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4571470874178140630
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4914054227674050081
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4914054227674050081
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5012940724606903311
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5012940724606903311
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5994256439390011320
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5994256439390011320
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6369051681840606601
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6369051681840606601
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6391496069076573377
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6391496069076573377
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6517132746326325848
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6517132746326325848
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 7270604957039011794
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 7270604957039011794
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8077058277077262192
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8077058277077262192
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8375915698557174338
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8375915698557174338
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Setup"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "caught panic 'too many milestones' from contract function 'Symbol(obj#4831)'"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "add_milestone"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_budget_panics.1.json b/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_budget_panics.1.json
+new file mode 100644
+index 0000000..7e92896
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_budget_panics.1.json
+@@ -0,0 +1,1464 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000000000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000000000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Setup"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000000000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000000000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000000000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "caught panic 'job budget exceeds maximum' from contract function 'Symbol(obj#305)'"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "add_milestone"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_panics.1.json b/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_panics.1.json
+new file mode 100644
+index 0000000..00b492c
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_panics.1.json
+@@ -0,0 +1,1288 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Setup"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000000001
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "caught panic 'milestone amount exceeds maximum' from contract function 'Symbol(obj#223)'"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000000001
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "add_milestone"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000000001
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_amend_milestones_locked_when_disputed.1.json b/contracts/escrow/test_snapshots/test/test_amend_milestones_locked_when_disputed.1.json
+new file mode 100644
+index 0000000..00485c0
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_amend_milestones_locked_when_disputed.1.json
+@@ -0,0 +1,1944 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "raise_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Disputed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "raise_dispute: job {}"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "DisputeRaised"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ },
++ {
++ "u32": 1
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "amend_milestones"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "amend_milestones"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 6
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "amend_milestones"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_amend_milestones_restructures_remaining.1.json b/contracts/escrow/test_snapshots/test/test_amend_milestones_restructures_remaining.1.json
+new file mode 100644
+index 0000000..e4f23de
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_amend_milestones_restructures_remaining.1.json
+@@ -0,0 +1,3454 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "amend_milestones",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ],
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "amend_milestones",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 3126073502131104533
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 3126073502131104533
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "amend_milestones"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "MilestonesAmended"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amended_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestone_count"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "remaining_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 7000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "amend_milestones"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_milestone_status"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_milestone_status"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 2
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_amend_milestones_sum_mismatch_panics.1.json b/contracts/escrow/test_snapshots/test/test_amend_milestones_sum_mismatch_panics.1.json
+new file mode 100644
+index 0000000..40521ce
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_amend_milestones_sum_mismatch_panics.1.json
+@@ -0,0 +1,1781 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "amend_milestones"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "amend_milestones"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 7
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 7
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 7
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "amend_milestones"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 7
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_cancel_brief_in_setup_marks_refunded_without_transfer.1.json b/contracts/escrow/test_snapshots/test/test_cancel_brief_in_setup_marks_refunded_without_transfer.1.json
+new file mode 100644
+index 0000000..95102c3
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_cancel_brief_in_setup_marks_refunded_without_transfer.1.json
+@@ -0,0 +1,1236 @@
++{
++ "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"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 77
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "cancel_brief",
++ "args": [
++ {
++ "u64": 77
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 77
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 77
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Refunded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 77
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 77
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "cancel_brief"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 77
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "BriefCanceled"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "canceled_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "canceled_by"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 77
++ }
++ },
++ {
++ "key": {
++ "symbol": "refunded_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "cancel_brief"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 77
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Refunded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_event_emitted.1.json b/contracts/escrow/test_snapshots/test/test_deposit_event_emitted.1.json
+index fb888ef..e53ee0d 100644
+--- a/contracts/escrow/test_snapshots/test/test_deposit_event_emitted.1.json
++++ b/contracts/escrow/test_snapshots/test/test_deposit_event_emitted.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -224,6 +245,39 @@
+ 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": {
+@@ -263,7 +317,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -278,7 +332,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -296,7 +350,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -311,7 +365,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -409,6 +463,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -425,6 +487,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -500,6 +570,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -547,24 +625,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1404,6 +1487,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1660,6 +1790,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -1676,6 +1814,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -1751,6 +1897,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_invalid_state_not_setup.1.json b/contracts/escrow/test_snapshots/test/test_deposit_invalid_state_not_setup.1.json
+index ab339d7..341dcc5 100644
+--- a/contracts/escrow/test_snapshots/test/test_deposit_invalid_state_not_setup.1.json
++++ b/contracts/escrow/test_snapshots/test/test_deposit_invalid_state_not_setup.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -255,7 +276,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -270,7 +291,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -285,10 +306,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -300,10 +321,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -414,6 +435,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -467,6 +521,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -483,6 +545,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -585,6 +655,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -632,24 +710,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1579,6 +1662,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_negative_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_negative_panics.1.json
+index 91567dd..023e647 100644
+--- a/contracts/escrow/test_snapshots/test/test_deposit_negative_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_deposit_negative_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -175,6 +196,39 @@
+ 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": {
+@@ -214,7 +268,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -229,7 +283,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -327,6 +381,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -343,6 +405,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -418,6 +488,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -425,7 +503,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 0
++ "lo": 1000
+ }
+ }
+ }
+@@ -465,24 +543,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json
+index fd6acd1..454ace3 100644
+--- a/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -150,6 +171,39 @@
+ 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": {
+@@ -189,7 +243,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+@@ -204,7 +258,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+@@ -269,6 +323,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -285,6 +347,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -332,6 +402,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -379,24 +457,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_reentrancy_guard_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_reentrancy_guard_panics.1.json
+new file mode 100644
+index 0000000..a0e1e84
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_deposit_reentrancy_guard_panics.1.json
+@@ -0,0 +1,1546 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Setup"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Locked"
++ }
++ ]
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 12
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "deposit"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_success_transitions_to_funded.1.json b/contracts/escrow/test_snapshots/test/test_deposit_success_transitions_to_funded.1.json
+index 2844e8d..3e585eb 100644
+--- a/contracts/escrow/test_snapshots/test/test_deposit_success_transitions_to_funded.1.json
++++ b/contracts/escrow/test_snapshots/test/test_deposit_success_transitions_to_funded.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -227,6 +248,39 @@
+ 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": {
+@@ -266,7 +320,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -281,7 +335,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -299,7 +353,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -314,7 +368,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -412,6 +466,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -428,6 +490,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -503,6 +573,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -550,24 +628,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1459,6 +1542,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1715,6 +1845,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -1731,6 +1869,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -1806,6 +1952,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json
+index 8050767..9f9f098 100644
+--- a/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -175,6 +196,39 @@
+ 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": {
+@@ -214,7 +268,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -229,7 +283,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -327,6 +381,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -343,6 +405,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -418,6 +488,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -425,7 +503,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 0
++ "lo": 500
+ }
+ }
+ }
+@@ -465,24 +543,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics_2.1.json b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics_2.1.json
+new file mode 100644
+index 0000000..416c4fc
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics_2.1.json
+@@ -0,0 +1,3283 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_funds",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_funds",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_funds",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 1
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 94000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "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": {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_funds: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_funds: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_funds: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_deposit_zero_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_zero_panics.1.json
+index 9be8269..9dfb0b9 100644
+--- a/contracts/escrow/test_snapshots/test/test_deposit_zero_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_deposit_zero_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -175,6 +196,39 @@
+ 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": {
+@@ -214,7 +268,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -229,7 +283,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -327,6 +381,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -343,6 +405,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -418,6 +488,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -425,7 +503,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 0
++ "lo": 1000
+ }
+ }
+ }
+@@ -465,24 +543,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+diff --git a/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json b/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json
+index ce0144f..ff1d1a5 100644
+--- a/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json
++++ b/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -378,6 +399,39 @@
+ 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": {
+@@ -417,7 +471,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 115220454072064130
++ "nonce": 3126073502131104533
+ }
+ },
+ "durability": "temporary"
+@@ -432,7 +486,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 115220454072064130
++ "nonce": 3126073502131104533
+ }
+ },
+ "durability": "temporary",
+@@ -450,7 +504,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+@@ -465,7 +519,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+@@ -681,7 +735,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1194852393571756375
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+@@ -696,7 +750,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1194852393571756375
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+@@ -761,6 +815,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -777,6 +839,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -933,6 +1003,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -980,24 +1058,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -2180,6 +2263,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2820,6 +2950,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2836,6 +2974,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -2992,6 +3138,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -3355,6 +3509,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -3371,6 +3533,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -3527,6 +3697,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_dispute_deadline_set_on_raise.1.json b/contracts/escrow/test_snapshots/test/test_dispute_deadline_set_on_raise.1.json
+new file mode 100644
+index 0000000..596e348
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_dispute_deadline_set_on_raise.1.json
+@@ -0,0 +1,1959 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "raise_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Disputed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "raise_dispute: job {}"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "DisputeRaised"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ },
++ {
++ "u32": 1
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_dispute_deadline"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_dispute_deadline"
++ }
++ ],
++ "data": {
++ "u64": 604800
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_dispute_event_emission.1.json b/contracts/escrow/test_snapshots/test/test_dispute_event_emission.1.json
+index 267244d..93fb2ad 100644
+--- a/contracts/escrow/test_snapshots/test/test_dispute_event_emission.1.json
++++ b/contracts/escrow/test_snapshots/test/test_dispute_event_emission.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -252,7 +273,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -267,7 +288,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -282,10 +303,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -297,10 +318,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -411,6 +432,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -464,6 +518,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -480,6 +542,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -555,6 +625,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -602,24 +680,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1459,6 +1542,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1835,6 +1965,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -1851,6 +1989,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -1926,6 +2072,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_double_create_job_panics.1.json b/contracts/escrow/test_snapshots/test/test_double_create_job_panics.1.json
+index 62d18ed..8190f50 100644
+--- a/contracts/escrow/test_snapshots/test/test_double_create_job_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_double_create_job_panics.1.json
+@@ -130,6 +130,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -146,6 +154,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -193,6 +209,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -410,27 +434,16 @@
+ "v0": {
+ "topics": [
+ {
+- "symbol": "log"
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "caught panic 'job already exists' from contract function 'Symbol(obj#47)'"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+- }
+- ]
++ "error": {
++ "contract": 4
++ }
+ }
+ }
+ }
+@@ -450,12 +463,12 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 4
+ }
+ }
+ ],
+ "data": {
+- "string": "caught error from function"
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+@@ -475,7 +488,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 4
+ }
+ }
+ ],
+@@ -523,7 +536,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 4
+ }
+ }
+ ],
+diff --git a/contracts/escrow/test_snapshots/test/test_double_init.1.json b/contracts/escrow/test_snapshots/test/test_double_init.1.json
+index a76a50f..a9e3dd9 100644
+--- a/contracts/escrow/test_snapshots/test/test_double_init.1.json
++++ b/contracts/escrow/test_snapshots/test/test_double_init.1.json
+@@ -4,7 +4,28 @@
+ "nonce": 0
+ },
+ "auth": [
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ []
+ ],
+ "ledger": {
+@@ -17,6 +38,39 @@
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -44,24 +98,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+diff --git a/contracts/escrow/test_snapshots/test/test_double_release_milestone_is_blocked.1.json b/contracts/escrow/test_snapshots/test/test_double_release_milestone_is_blocked.1.json
+new file mode 100644
+index 0000000..3f9763a
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_double_release_milestone_is_blocked.1.json
+@@ -0,0 +1,2231 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 6
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "release_milestone"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_emergency_sweep_by_admin.1.json b/contracts/escrow/test_snapshots/test/test_emergency_sweep_by_admin.1.json
+new file mode 100644
+index 0000000..e1b5057
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_emergency_sweep_by_admin.1.json
+@@ -0,0 +1,2821 @@
++{
++ "generators": {
++ "address": 7,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "set_admin",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "emergency_sweep",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "account": {
++ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Refunded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "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": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "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": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ {
++ "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": "0000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 120960
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "emergency_sweep"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "EmergencySweep"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "rescue_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "swept_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "emergency_sweep"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Refunded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_emergency_sweep_nothing_to_sweep.1.json b/contracts/escrow/test_snapshots/test/test_emergency_sweep_nothing_to_sweep.1.json
+new file mode 100644
+index 0000000..462427f
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_emergency_sweep_nothing_to_sweep.1.json
+@@ -0,0 +1,2101 @@
++{
++ "generators": {
++ "address": 7,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "set_admin",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "account": {
++ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "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": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "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": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ {
++ "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": "0000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 120960
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "emergency_sweep"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "emergency_sweep"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 18
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 18
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 18
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "emergency_sweep"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 18
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_emergency_sweep_requires_admin_auth.1.json b/contracts/escrow/test_snapshots/test/test_emergency_sweep_requires_admin_auth.1.json
+new file mode 100644
+index 0000000..e0b35df
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_emergency_sweep_requires_admin_auth.1.json
+@@ -0,0 +1,1787 @@
++{
++ "generators": {
++ "address": 7,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "set_admin",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "account": {
++ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "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": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ {
++ "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": "0000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 120960
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "emergency_sweep"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "auth": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Unauthorized function call for address"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "auth": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "auth": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "auth": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "emergency_sweep"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "auth": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json b/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json
+index eb383c7..bfe7dd3 100644
+--- a/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json
++++ b/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -405,6 +426,39 @@
+ 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": {
+@@ -477,7 +531,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+@@ -492,7 +546,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+@@ -510,7 +564,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1194852393571756375
++ "nonce": 1301173170172112462
+ }
+ },
+ "durability": "temporary"
+@@ -525,7 +579,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1194852393571756375
++ "nonce": 1301173170172112462
+ }
+ },
+ "durability": "temporary",
+@@ -821,6 +875,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -837,6 +899,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -993,6 +1063,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -1040,24 +1118,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -2240,6 +2323,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -3432,6 +3562,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -3448,6 +3586,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -3604,6 +3750,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_expire_dispute_refunds_client_after_deadline.1.json b/contracts/escrow/test_snapshots/test/test_expire_dispute_refunds_client_after_deadline.1.json
+new file mode 100644
+index 0000000..f25ea84
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_expire_dispute_refunds_client_after_deadline.1.json
+@@ -0,0 +1,2491 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "raise_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "expire_dispute",
++ "args": [
++ {
++ "u64": 1
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "sequence_number": 0,
++ "timestamp": 691200,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Refunded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 92000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "raise_dispute: job {}"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "DisputeRaised"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ },
++ {
++ "u32": 1
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "expire_dispute"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "expire_dispute: job {} refunded {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "DisputeExpired"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "expired_at"
++ },
++ "val": {
++ "u64": 691200
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "refunded_to"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "expire_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Refunded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 8000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_fee_split_rounds_dust_to_freelancer.1.json b/contracts/escrow/test_snapshots/test/test_fee_split_rounds_dust_to_freelancer.1.json
+new file mode 100644
+index 0000000..59c199d
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_fee_split_rounds_dust_to_freelancer.1.json
+@@ -0,0 +1,2570 @@
++{
++ "generators": {
++ "address": 7,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "set_admin",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "set_fee_config",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "u32": 100
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "account": {
++ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "FeeBps"
++ }
++ ]
++ },
++ "val": {
++ "u32": 100
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Treasury"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 99001
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 990
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 9
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "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": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ {
++ "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": "0000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 120960
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "set_fee_config"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "u32": 100
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "FeeConfigUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "fee_bps"
++ },
++ "val": {
++ "u32": 100
++ }
++ },
++ {
++ "key": {
++ "symbol": "treasury"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_fee_config"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 9
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 9
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 990
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 990
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "FeeSplit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "freelancer_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 990
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "split_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "treasury_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 9
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 999
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 9
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 990
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 9
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 990
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_fee_split_routes_fee_to_treasury.1.json b/contracts/escrow/test_snapshots/test/test_fee_split_routes_fee_to_treasury.1.json
+new file mode 100644
+index 0000000..4d4c463
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_fee_split_routes_fee_to_treasury.1.json
+@@ -0,0 +1,2613 @@
++{
++ "generators": {
++ "address": 7,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "set_admin",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "set_fee_config",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "u32": 250
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "account": {
++ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "FeeBps"
++ }
++ ]
++ },
++ "val": {
++ "u32": 250
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Treasury"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 9750
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ },
++ "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": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
++ "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ },
++ {
++ "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": "0000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 120960
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "set_fee_config"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "u32": 250
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "FeeConfigUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "fee_bps"
++ },
++ "val": {
++ "u32": 250
++ }
++ },
++ {
++ "key": {
++ "symbol": "treasury"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_fee_config"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_fee_bps"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_fee_bps"
++ }
++ ],
++ "data": {
++ "u32": 250
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_treasury"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_treasury"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 9750
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 9750
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "FeeSplit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "freelancer_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 9750
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "split_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "treasury_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 250
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 9750
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_get_job_not_found_panics.1.json b/contracts/escrow/test_snapshots/test/test_get_job_not_found_panics.1.json
+index f5cb5aa..d85b49e 100644
+--- a/contracts/escrow/test_snapshots/test/test_get_job_not_found_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_get_job_not_found_panics.1.json
+@@ -4,7 +4,28 @@
+ "nonce": 0
+ },
+ "auth": [
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ []
+ ],
+ "ledger": {
+@@ -17,6 +38,39 @@
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -44,24 +98,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -250,18 +309,16 @@
+ "v0": {
+ "topics": [
+ {
+- "symbol": "log"
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "caught panic 'job not found' from contract function 'Symbol(get_job)'"
+- },
+- {
+- "u64": 999
+- }
+- ]
++ "error": {
++ "contract": 5
++ }
+ }
+ }
+ }
+@@ -281,12 +338,12 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 5
+ }
+ }
+ ],
+ "data": {
+- "string": "caught error from function"
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+@@ -306,7 +363,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 5
+ }
+ }
+ ],
+@@ -345,7 +402,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 5
+ }
+ }
+ ],
+diff --git a/contracts/escrow/test_snapshots/test/test_get_multisig_config.1.json b/contracts/escrow/test_snapshots/test/test_get_multisig_config.1.json
+new file mode 100644
+index 0000000..84f803a
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_get_multisig_config.1.json
+@@ -0,0 +1,1467 @@
++{
++ "generators": {
++ "address": 8,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
++ "function_name": "set_admin",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "function_name": "configure_multisig",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ ]
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "account": {
++ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
++ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Setup"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": {
++ "vec": [
++ {
++ "symbol": "MultisigConfig"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": {
++ "vec": [
++ {
++ "symbol": "MultisigConfig"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "current_signatures"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "required_signatures"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "signers"
++ },
++ "val": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
++ "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
++ }
++ },
++ {
++ "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": "0000000000000000000000000000000000000000000000000000000000000007"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 120960
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
++ },
++ {
++ "symbol": "configure_multisig"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ ]
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "MultisigConfigured"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "configured_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "required_signatures"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_signers"
++ },
++ "val": {
++ "u32": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "configure_multisig"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
++ },
++ {
++ "symbol": "get_multisig_config"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_multisig_config"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "current_signatures"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "required_signatures"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "signers"
++ },
++ "val": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json b/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json
+index 33c197b..37d4c26 100644
+--- a/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json
++++ b/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -345,6 +366,39 @@
+ 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": {
+@@ -384,7 +438,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+@@ -399,7 +453,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+@@ -695,6 +749,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -711,6 +773,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -840,6 +910,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -887,24 +965,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1997,6 +2080,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -3063,6 +3193,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -3079,6 +3217,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -3208,6 +3354,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_instance_config_getters.1.json b/contracts/escrow/test_snapshots/test/test_instance_config_getters.1.json
+new file mode 100644
+index 0000000..6d33711
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_instance_config_getters.1.json
+@@ -0,0 +1,373 @@
++{
++ "generators": {
++ "address": 3,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "get_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "get_agent_judge"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_agent_judge"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_no_fee_when_unconfigured.1.json b/contracts/escrow/test_snapshots/test/test_no_fee_when_unconfigured.1.json
+new file mode 100644
+index 0000000..45ab671
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_no_fee_when_unconfigured.1.json
+@@ -0,0 +1,2051 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_fee_bps"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_fee_bps"
++ }
++ ],
++ "data": {
++ "u32": 0
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_open_dispute_by_rando_panics.1.json b/contracts/escrow/test_snapshots/test/test_open_dispute_by_rando_panics.1.json
+index ac80f4d..c3c0830 100644
+--- a/contracts/escrow/test_snapshots/test/test_open_dispute_by_rando_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_open_dispute_by_rando_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -224,6 +245,39 @@
+ 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": {
+@@ -263,7 +317,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -278,7 +332,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -296,7 +350,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -311,7 +365,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -409,6 +463,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -425,6 +487,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -500,6 +570,14 @@
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -547,24 +625,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1404,6 +1487,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+diff --git a/contracts/escrow/test_snapshots/test/test_open_dispute_on_completed_panics.1.json b/contracts/escrow/test_snapshots/test/test_open_dispute_on_completed_panics.1.json
+index 8918325..adb4906 100644
+--- a/contracts/escrow/test_snapshots/test/test_open_dispute_on_completed_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_open_dispute_on_completed_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -252,7 +273,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -267,7 +288,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -282,10 +303,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -297,10 +318,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -411,6 +432,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -464,6 +518,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -480,6 +542,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -555,6 +625,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -602,24 +680,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1532,6 +1615,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_blocks_release_funds.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_blocks_release_funds.1.json
+index 5292531..909638a 100644
+--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_blocks_release_funds.1.json
++++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_blocks_release_funds.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -325,7 +346,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -340,7 +361,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -355,10 +376,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -370,10 +391,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -484,6 +505,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -556,7 +610,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5806905060045992000
++ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+@@ -571,7 +625,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5806905060045992000
++ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+@@ -636,6 +690,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -652,6 +714,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -781,6 +851,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -828,24 +906,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1938,6 +2021,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2584,6 +2714,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2600,6 +2738,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -2729,6 +2875,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json
+index 0e50b0d..b08c2eb 100644
+--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json
++++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -302,7 +323,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -317,7 +338,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -332,10 +353,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -347,10 +368,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -461,6 +482,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -580,6 +634,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -596,6 +658,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -725,6 +795,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -772,24 +850,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1809,6 +1892,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2185,6 +2315,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2201,6 +2339,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -2330,6 +2476,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_freelancer_locks_funds.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_freelancer_locks_funds.1.json
+index b8771d1..6a2afda 100644
+--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_freelancer_locks_funds.1.json
++++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_freelancer_locks_funds.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -277,7 +298,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -292,7 +313,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -307,10 +328,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -322,10 +343,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -439,7 +460,7 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+@@ -454,7 +475,7 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+@@ -469,6 +490,39 @@
+ 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": {
+@@ -522,6 +576,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -538,6 +600,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -640,6 +710,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -687,24 +765,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1634,6 +1717,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2010,6 +2140,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2026,6 +2164,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -2128,6 +2274,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_third_party_panics.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_third_party_panics.1.json
+index 7cb3bc3..5931078 100644
+--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_third_party_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_third_party_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -224,6 +245,39 @@
+ 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": {
+@@ -263,7 +317,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -278,7 +332,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -296,7 +350,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -311,7 +365,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -409,6 +463,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -425,6 +487,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -500,6 +570,14 @@
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -547,24 +625,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1404,6 +1487,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1643,21 +1773,16 @@
+ "v0": {
+ "topics": [
+ {
+- "symbol": "log"
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "caught panic 'unauthorized: only client or freelancer can raise a dispute' from contract function 'Symbol(obj#449)'"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+- }
+- ]
++ "error": {
++ "contract": 3
++ }
+ }
+ }
+ }
+@@ -1677,12 +1802,12 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 3
+ }
+ }
+ ],
+ "data": {
+- "string": "caught error from function"
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+@@ -1702,7 +1827,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 3
+ }
+ }
+ ],
+@@ -1744,7 +1869,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 3
+ }
+ }
+ ],
+diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_on_completed_job_panics.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_on_completed_job_panics.1.json
+index 7cc3a52..f0879f3 100644
+--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_on_completed_job_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_on_completed_job_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -252,7 +273,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -267,7 +288,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -282,10 +303,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -297,10 +318,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -411,6 +432,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -464,6 +518,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -480,6 +542,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -555,6 +625,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -602,24 +680,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1532,6 +1615,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1989,21 +2119,16 @@
+ "v0": {
+ "topics": [
+ {
+- "symbol": "log"
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "caught panic 'dispute cannot be raised: job is not in active state' from contract function 'Symbol(obj#615)'"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+- }
+- ]
++ "error": {
++ "contract": 6
++ }
+ }
+ }
+ }
+@@ -2023,12 +2148,12 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+ "data": {
+- "string": "caught error from function"
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+@@ -2048,7 +2173,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+@@ -2090,7 +2215,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_then_resolve.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_then_resolve.1.json
+index 19905c5..6ff3ec5 100644
+--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_then_resolve.1.json
++++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_then_resolve.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -353,6 +374,39 @@
+ 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": {
+@@ -392,7 +446,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1194852393571756375
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+@@ -407,7 +461,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1194852393571756375
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+@@ -425,7 +479,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+@@ -440,7 +494,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+@@ -703,6 +757,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -848,6 +910,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -895,24 +965,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -2005,6 +2080,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2651,6 +2773,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2796,6 +2926,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -3159,6 +3297,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -3304,6 +3450,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_reentrant_refund_panics.1.json b/contracts/escrow/test_snapshots/test/test_reentrant_refund_panics.1.json
+new file mode 100644
+index 0000000..2631a7f
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_reentrant_refund_panics.1.json
+@@ -0,0 +1,1928 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Locked"
++ }
++ ]
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "refund"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 12
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "refund"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_reentrant_release_funds_panics.1.json b/contracts/escrow/test_snapshots/test/test_reentrant_release_funds_panics.1.json
+new file mode 100644
+index 0000000..ca90d88
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_reentrant_release_funds_panics.1.json
+@@ -0,0 +1,1934 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Locked"
++ }
++ ]
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 12
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "release_funds"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_reentrant_release_milestone_panics.1.json b/contracts/escrow/test_snapshots/test/test_reentrant_release_milestone_panics.1.json
+new file mode 100644
+index 0000000..e4a83e4
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_reentrant_release_milestone_panics.1.json
+@@ -0,0 +1,1928 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Locked"
++ }
++ ]
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 12
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "release_milestone"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_refund.1.json b/contracts/escrow/test_snapshots/test/test_refund.1.json
+index 93799cf..2ba5758 100644
+--- a/contracts/escrow/test_snapshots/test/test_refund.1.json
++++ b/contracts/escrow/test_snapshots/test/test_refund.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -177,6 +198,7 @@
+ ]
+ ],
+ [],
++ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -205,7 +227,7 @@
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+- "timestamp": 0,
++ "timestamp": 2592001,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+@@ -279,7 +301,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -294,7 +316,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -309,10 +331,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -324,10 +346,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -438,6 +460,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -524,6 +579,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -540,6 +603,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -610,7 +681,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 0
+ }
+ }
+ },
+@@ -642,6 +713,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -689,24 +768,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1636,6 +1720,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1885,6 +2016,55 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_expiry"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_expiry"
++ }
++ ],
++ "data": {
++ "u64": 2592000
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2073,7 +2253,7 @@
+ }
+ },
+ {
+- "u64": 0
++ "u64": 2592001
+ }
+ ]
+ }
+@@ -2162,6 +2342,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2178,6 +2366,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -2248,7 +2444,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 0
+ }
+ }
+ },
+@@ -2280,6 +2476,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_refund_before_lockup_rejected.1.json b/contracts/escrow/test_snapshots/test/test_refund_before_lockup_rejected.1.json
+new file mode 100644
+index 0000000..0459523
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_refund_before_lockup_rejected.1.json
+@@ -0,0 +1,1755 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "refund"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "refund"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 17
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 17
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 17
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "refund"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 17
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_refund_by_non_client_panics.1.json b/contracts/escrow/test_snapshots/test/test_refund_by_non_client_panics.1.json
+index afdc756..ee892b2 100644
+--- a/contracts/escrow/test_snapshots/test/test_refund_by_non_client_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_refund_by_non_client_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -224,6 +245,39 @@
+ 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": {
+@@ -263,7 +317,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -278,7 +332,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -296,7 +350,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -311,7 +365,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -409,6 +463,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -425,6 +487,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -500,6 +570,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -547,24 +625,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1404,6 +1487,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+diff --git a/contracts/escrow/test_snapshots/test/test_refund_reentrant_lock_panics.1.json b/contracts/escrow/test_snapshots/test/test_refund_reentrant_lock_panics.1.json
+new file mode 100644
+index 0000000..66da6ac
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_refund_reentrant_lock_panics.1.json
+@@ -0,0 +1,1931 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobLock"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobLock"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "refund"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "refund"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 23
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 23
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 23
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "refund"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 23
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_explicit_index.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_explicit_index.1.json
+index 029e37c..e111f86 100644
+--- a/contracts/escrow/test_snapshots/test/test_release_funds_explicit_index.1.json
++++ b/contracts/escrow/test_snapshots/test/test_release_funds_explicit_index.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -352,6 +373,39 @@
+ 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": {
+@@ -391,7 +445,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+@@ -406,7 +460,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+@@ -702,6 +756,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -847,6 +909,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -894,24 +964,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -2004,6 +2079,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2962,6 +3084,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -3107,6 +3237,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics.1.json
+index 2419cfd..047ba50 100644
+--- a/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -224,6 +245,39 @@
+ 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": {
+@@ -263,7 +317,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -278,7 +332,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -296,7 +350,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -311,7 +365,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -409,6 +463,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -425,6 +487,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -500,6 +570,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -547,24 +625,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1404,6 +1487,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1646,24 +1776,16 @@
+ "v0": {
+ "topics": [
+ {
+- "symbol": "log"
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "caught panic 'invalid milestone index' from contract function 'Symbol(obj#447)'"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+- },
+- {
+- "u32": 5
+- }
+- ]
++ "error": {
++ "contract": 4
++ }
+ }
+ }
+ }
+@@ -1683,12 +1805,12 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 4
+ }
+ }
+ ],
+ "data": {
+- "string": "caught error from function"
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+@@ -1708,7 +1830,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 4
+ }
+ }
+ ],
+@@ -1753,7 +1875,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 4
+ }
+ }
+ ],
+diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics_2.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics_2.1.json
+new file mode 100644
+index 0000000..b3a468a
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics_2.1.json
+@@ -0,0 +1,1903 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2500
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2500
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 6
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "resolve_dispute"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2500
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2500
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_out_of_order.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_out_of_order.1.json
+new file mode 100644
+index 0000000..416c4fc
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_release_funds_out_of_order.1.json
+@@ -0,0 +1,3283 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_funds",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_funds",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_funds",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 1
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 94000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "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": {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_funds: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_funds: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_funds: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 2000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_reentrant_lock_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_reentrant_lock_panics.1.json
+new file mode 100644
+index 0000000..890f4ba
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_release_funds_reentrant_lock_panics.1.json
+@@ -0,0 +1,1945 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobLock"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobLock"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_funds"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "caught panic 'reentrant job operation: ReentrantCall' from contract function 'Symbol(obj#485)'"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "release_funds"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "wasm_vm": "invalid_action"
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_twice_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_twice_panics.1.json
+index 45a5aeb..096541a 100644
+--- a/contracts/escrow/test_snapshots/test/test_release_funds_twice_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_release_funds_twice_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -255,7 +276,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -270,7 +291,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -285,10 +306,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -300,10 +321,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -414,6 +435,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -467,6 +521,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -483,6 +545,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -558,6 +628,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -605,24 +683,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1535,6 +1618,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1959,24 +2089,16 @@
+ "v0": {
+ "topics": [
+ {
+- "symbol": "log"
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "caught panic 'job not in releaseable state' from contract function 'Symbol(obj#605)'"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+- },
+- {
+- "u32": 0
+- }
+- ]
++ "error": {
++ "contract": 6
++ }
+ }
+ }
+ }
+@@ -1996,12 +2118,12 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+ "data": {
+- "string": "caught error from function"
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+@@ -2021,7 +2143,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+@@ -2066,7 +2188,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_no_pending_milestones.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_no_pending_milestones.1.json
+index ca27c81..3f9763a 100644
+--- a/contracts/escrow/test_snapshots/test/test_release_milestone_no_pending_milestones.1.json
++++ b/contracts/escrow/test_snapshots/test/test_release_milestone_no_pending_milestones.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -252,7 +273,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -267,7 +288,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -282,10 +303,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -297,10 +318,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -411,6 +432,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -464,6 +518,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -480,6 +542,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -555,6 +625,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -602,24 +680,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1532,6 +1615,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_overflow_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_overflow_panics.1.json
+index ca27c81..3f9763a 100644
+--- a/contracts/escrow/test_snapshots/test/test_release_milestone_overflow_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_release_milestone_overflow_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -252,7 +273,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -267,7 +288,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -282,10 +303,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -297,10 +318,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -411,6 +432,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -464,6 +518,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -480,6 +542,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -555,6 +625,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -602,24 +680,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1532,6 +1615,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_reentrancy_guard_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_reentrancy_guard_panics.1.json
+new file mode 100644
+index 0000000..5969560
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_release_milestone_reentrancy_guard_panics.1.json
+@@ -0,0 +1,1928 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Locked"
++ }
++ ]
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 99000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 12
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "release_milestone"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 12
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_reentrant_lock_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_reentrant_lock_panics.1.json
+new file mode 100644
+index 0000000..6f5da66
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_release_milestone_reentrant_lock_panics.1.json
+@@ -0,0 +1,1931 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobLock"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobLock"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 23
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 23
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 23
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "release_milestone"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 23
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_sequential_success.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_sequential_success.1.json
+index 4501710..bd974d0 100644
+--- a/contracts/escrow/test_snapshots/test/test_release_milestone_sequential_success.1.json
++++ b/contracts/escrow/test_snapshots/test/test_release_milestone_sequential_success.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -345,6 +366,39 @@
+ 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": {
+@@ -384,7 +438,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+@@ -399,7 +453,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+@@ -695,6 +749,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -711,6 +773,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -840,6 +910,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -887,24 +965,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1997,6 +2080,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2471,6 +2601,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2487,6 +2625,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -2616,6 +2762,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -2963,6 +3117,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2979,6 +3141,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -3108,6 +3278,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -3455,6 +3633,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -3471,6 +3657,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -3600,6 +3794,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_unauthorized_freelancer.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_unauthorized_freelancer.1.json
+index e9f1d83..37f5a5b 100644
+--- a/contracts/escrow/test_snapshots/test/test_release_milestone_unauthorized_freelancer.1.json
++++ b/contracts/escrow/test_snapshots/test/test_release_milestone_unauthorized_freelancer.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -224,6 +245,39 @@
+ 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": {
+@@ -263,7 +317,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -278,7 +332,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -296,7 +350,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -311,7 +365,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -409,6 +463,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -425,6 +487,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -500,6 +570,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -547,24 +625,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1404,6 +1487,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+diff --git a/contracts/escrow/test_snapshots/test/test_released_amount_matches_transferred_on_sequential_release.1.json b/contracts/escrow/test_snapshots/test/test_released_amount_matches_transferred_on_sequential_release.1.json
+new file mode 100644
+index 0000000..2b0ec3d
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_released_amount_matches_transferred_on_sequential_release.1.json
+@@ -0,0 +1,3876 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 90000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "WorkInProgress"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "WorkInProgress"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 2
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_resolve_after_deadline_fails.1.json b/contracts/escrow/test_snapshots/test/test_resolve_after_deadline_fails.1.json
+new file mode 100644
+index 0000000..0b2dc9f
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_resolve_after_deadline_fails.1.json
+@@ -0,0 +1,2110 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "raise_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "sequence_number": 0,
++ "timestamp": 691200,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Disputed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "raise_dispute: job {}"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "DisputeRaised"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ },
++ {
++ "u32": 1
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 20
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 20
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 20
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 20
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 20
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "resolve_dispute"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 20
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_resolve_before_deadline_succeeds.1.json b/contracts/escrow/test_snapshots/test/test_resolve_before_deadline_succeeds.1.json
+new file mode 100644
+index 0000000..d391208
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_resolve_before_deadline_succeeds.1.json
+@@ -0,0 +1,2433 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "raise_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "resolve_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "sequence_number": 0,
++ "timestamp": 259200,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Resolved"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 94000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "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": {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "raise_dispute: job {}"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "DisputeRaised"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 0
++ },
++ {
++ "u32": 1
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "resolve_dispute: job {} payee {} payer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Resolved"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 6000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_payout_to_freelancer.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_payout_to_freelancer.1.json
+index c14f8e8..3713cb3 100644
+--- a/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_payout_to_freelancer.1.json
++++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_payout_to_freelancer.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -278,6 +299,39 @@
+ 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": {
+@@ -317,7 +371,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 8370022561469687789
++ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+@@ -332,7 +386,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 8370022561469687789
++ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+@@ -350,7 +404,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -365,7 +419,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -383,7 +437,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -398,7 +452,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -449,7 +503,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 4270020994084947596
++ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+@@ -464,7 +518,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 4270020994084947596
++ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+@@ -529,6 +583,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -545,6 +607,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -620,6 +690,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -667,24 +745,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1597,6 +1680,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2167,6 +2297,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2183,6 +2321,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -2258,6 +2404,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_refund_to_client.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_refund_to_client.1.json
+index 2f1f68d..da8e9d8 100644
+--- a/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_refund_to_client.1.json
++++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_refund_to_client.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -285,7 +306,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -300,7 +321,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -315,10 +336,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 8370022561469687789
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -330,10 +351,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 8370022561469687789
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -348,10 +369,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+@@ -363,10 +384,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+@@ -477,6 +498,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -530,6 +584,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -546,6 +608,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -621,6 +691,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -668,24 +746,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1525,6 +1608,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -2095,6 +2225,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -2111,6 +2249,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -2186,6 +2332,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_invalid_state_panics.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_invalid_state_panics.1.json
+new file mode 100644
+index 0000000..b3a468a
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_invalid_state_panics.1.json
+@@ -0,0 +1,1903 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2500
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2500
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 6
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "resolve_dispute"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2500
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2500
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_not_disputed_panics.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_not_disputed_panics.1.json
+index da128a2..2ad6860 100644
+--- a/contracts/escrow/test_snapshots/test/test_resolve_dispute_not_disputed_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_not_disputed_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -224,6 +245,39 @@
+ 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": {
+@@ -263,7 +317,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -278,7 +332,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -296,7 +350,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -311,7 +365,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -409,6 +463,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -500,6 +562,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -547,24 +617,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1404,6 +1479,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1652,30 +1774,16 @@
+ "v0": {
+ "topics": [
+ {
+- "symbol": "log"
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "caught panic 'job not disputed' from contract function 'Symbol(obj#447)'"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 2500
+- }
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 2500
+- }
+- }
+- ]
++ "error": {
++ "contract": 6
++ }
+ }
+ }
+ }
+@@ -1695,12 +1803,12 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+ "data": {
+- "string": "caught error from function"
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+@@ -1720,7 +1828,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+@@ -1771,7 +1879,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 6
+ }
+ }
+ ],
+diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_panics.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_panics.1.json
+new file mode 100644
+index 0000000..ca3a44e
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_panics.1.json
+@@ -0,0 +1,3608 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "raise_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "resolve_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Resolved"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 92100
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 7900
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "raise_dispute: job {}"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "DisputeRaised"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 1
++ },
++ {
++ "u32": 3
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Disputed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "resolve_dispute: job {} payee {} payer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Resolved"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 7900
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 92100
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_success.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_success.1.json
+new file mode 100644
+index 0000000..ca3a44e
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_success.1.json
+@@ -0,0 +1,3608 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "release_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "raise_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "resolve_dispute",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 115220454072064130
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1194852393571756375
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5806905060045992000
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 6277191135259896685
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Resolved"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 92100
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "authorized"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "clawback"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 518400
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 7900
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "release_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "ReleaseMilestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "raise_dispute: job {}"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "DisputeRaised"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 1
++ },
++ {
++ "u32": 3
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "raise_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Disputed"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "resolve_dispute: job {} payee {} payer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 4900
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2100
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "resolve_dispute"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 604800
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Released"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 3000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Resolved"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 7900
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "balance"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 92100
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_set_agent_judge_updates_packed_config.1.json b/contracts/escrow/test_snapshots/test/test_set_agent_judge_updates_packed_config.1.json
+new file mode 100644
+index 0000000..c7138b4
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_set_agent_judge_updates_packed_config.1.json
+@@ -0,0 +1,532 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "set_agent_judge",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "set_agent_judge"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Agent Judge updated to: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "AgentJudgeUpdated"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_agent_judge"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_agent_judge"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_agent_judge"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_set_fee_config_too_high_panics.1.json b/contracts/escrow/test_snapshots/test/test_set_fee_config_too_high_panics.1.json
+new file mode 100644
+index 0000000..52da7a7
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_set_fee_config_too_high_panics.1.json
+@@ -0,0 +1,369 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "set_fee_config"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 10001
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_fee_config"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 16
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 16
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 16
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "set_fee_config"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 10001
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 16
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_set_lockup_after_setup_rejected.1.json b/contracts/escrow/test_snapshots/test/test_set_lockup_after_setup_rejected.1.json
+new file mode 100644
+index 0000000..4eac67f
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_set_lockup_after_setup_rejected.1.json
+@@ -0,0 +1,1755 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "set_lockup_duration"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u64": 3600
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_lockup_duration"
++ }
++ ],
++ "data": {
++ "error": {
++ "contract": 6
++ }
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "set_lockup_duration"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u64": 3600
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 6
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_set_lockup_duration_then_refund_after_expiry.1.json b/contracts/escrow/test_snapshots/test/test_set_lockup_duration_then_refund_after_expiry.1.json
+new file mode 100644
+index 0000000..c7685bf
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_set_lockup_duration_then_refund_after_expiry.1.json
+@@ -0,0 +1,2253 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "set_lockup_duration",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "u64": 3600
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "refund",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "sequence_number": 0,
++ "timestamp": 3601,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 3600
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Refunded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "AgentJudge"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "set_lockup_duration"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u64": 3600
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "LockupUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 3600
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_lockup_duration"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_expiry"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_expiry"
++ }
++ ],
++ "data": {
++ "u64": 3600
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "refund"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "refund: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Refunded"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ },
++ {
++ "u64": 3601
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "refund"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 3600
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Refunded"
++ }
++ ]
++ }
++ },
++ {
++ "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/escrow/test_snapshots/test/test_token_decimals_stored_on_deposit.1.json b/contracts/escrow/test_snapshots/test/test_token_decimals_stored_on_deposit.1.json
+new file mode 100644
+index 0000000..036fca2
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_token_decimals_stored_on_deposit.1.json
+@@ -0,0 +1,1784 @@
++{
++ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "mint",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "create_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "add_milestone",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "deposit",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": [
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "function_name": "transfer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "created_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 2592000
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "milestones"
++ },
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Pending"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "released_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "requires_multisig"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Funded"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "token"
++ },
++ "val": {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "Config"
++ }
++ ]
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Balance"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 95000
++ }
++ }
++ },
++ {
++ "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": "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": {
++ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "init_asset"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "set_admin"
++ },
++ {
++ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_admin"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "mint"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mint"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "Escrow initialized with admin: {} and agent_judge: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Initialized"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 0
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "create_job: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "create_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "add_milestone: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "add_milestone"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "transfer"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
++ }
++ ],
++ "data": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "transfer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "deposit: job {} amount {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "escrow"
++ },
++ {
++ "string": "Deposit"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "amount"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "deposited_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "deposit"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_token_decimals"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_token_decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json b/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json
+index 5870434..456f4ca 100644
+--- a/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json
++++ b/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -255,7 +276,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+@@ -270,7 +291,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 5541220902715666415
++ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+@@ -285,10 +306,10 @@
+ [
+ {
+ "contract_data": {
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+@@ -300,10 +321,10 @@
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+@@ -414,6 +435,39 @@
+ 6311999
+ ]
+ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
+ [
+ {
+ "contract_data": {
+@@ -467,6 +521,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -483,6 +545,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -585,6 +655,14 @@
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -632,24 +710,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1579,6 +1662,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+diff --git a/contracts/escrow/test_snapshots/test/test_unauthorized_release_funds_by_freelancer_panics.1.json b/contracts/escrow/test_snapshots/test/test_unauthorized_release_funds_by_freelancer_panics.1.json
+index 26afcd3..7f41d1a 100644
+--- a/contracts/escrow/test_snapshots/test/test_unauthorized_release_funds_by_freelancer_panics.1.json
++++ b/contracts/escrow/test_snapshots/test/test_unauthorized_release_funds_by_freelancer_panics.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -224,6 +245,39 @@
+ 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": {
+@@ -263,7 +317,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+@@ -278,7 +332,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+@@ -296,7 +350,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+@@ -311,7 +365,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 2032731177588607455
++ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+@@ -409,6 +463,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -425,6 +487,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -500,6 +570,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -547,24 +625,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1404,6 +1487,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1646,24 +1776,16 @@
+ "v0": {
+ "topics": [
+ {
+- "symbol": "log"
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "caught panic 'only client can release' from contract function 'Symbol(obj#447)'"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+- },
+- {
+- "u32": 0
+- }
+- ]
++ "error": {
++ "contract": 3
++ }
+ }
+ }
+ }
+@@ -1683,12 +1805,12 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 3
+ }
+ }
+ ],
+ "data": {
+- "string": "caught error from function"
++ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+@@ -1708,7 +1830,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 3
+ }
+ }
+ ],
+@@ -1753,7 +1875,7 @@
+ },
+ {
+ "error": {
+- "wasm_vm": "invalid_action"
++ "contract": 3
+ }
+ }
+ ],
+diff --git a/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json b/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json
+index 25b85f7..ebe75ea 100644
+--- a/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json
++++ b/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json
+@@ -48,7 +48,28 @@
+ }
+ ]
+ ],
+- [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+@@ -345,6 +366,39 @@
+ 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": {
+@@ -384,7 +438,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+@@ -399,7 +453,7 @@
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+- "nonce": 1033654523790656264
++ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+@@ -695,6 +749,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -711,6 +773,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -840,6 +910,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+@@ -887,24 +965,29 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Admin"
++ "symbol": "Config"
+ }
+ ]
+ },
+ "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- },
+- {
+- "key": {
+- "vec": [
++ "map": [
++ {
++ "key": {
++ "symbol": "admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
+ {
+- "symbol": "AgentJudge"
++ "key": {
++ "symbol": "agent_judge"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
+ }
+ ]
+- },
+- "val": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+@@ -1997,6 +2080,53 @@
+ },
+ "failed_call": false
+ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "decimals"
++ }
++ ],
++ "data": {
++ "u32": 7
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
+ {
+ "event": {
+ "ext": "v0",
+@@ -3186,6 +3316,14 @@
+ "u64": 0
+ }
+ },
++ {
++ "key": {
++ "symbol": "dispute_deadline"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "expires_at"
+@@ -3202,6 +3340,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "funded_ledger_seq"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
+ {
+ "key": {
+ "symbol": "milestones"
+@@ -3331,6 +3477,14 @@
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
++ {
++ "key": {
++ "symbol": "token_decimals"
++ },
++ "val": {
++ "u32": 7
++ }
++ },
+ {
+ "key": {
+ "symbol": "total_amount"
+diff --git a/contracts/escrow/test_snapshots/test/test_version.1.json b/contracts/escrow/test_snapshots/test/test_version.1.json
+new file mode 100644
+index 0000000..87cf6d9
+--- /dev/null
++++ b/contracts/escrow/test_snapshots/test/test_version.1.json
+@@ -0,0 +1,123 @@
++{
++ "generators": {
++ "address": 1,
++ "nonce": 0
++ },
++ "auth": [
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
++ },
++ {
++ "symbol": "version"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "version"
++ }
++ ],
++ "data": {
++ "u32": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_accept_bid_after_expiration_panics.1.json b/contracts/job_registry/test_snapshots/test/test_accept_bid_after_expiration_panics.1.json
+new file mode 100644
+index 0000000..88709cc
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_accept_bid_after_expiration_panics.1.json
+@@ -0,0 +1,970 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "sequence_number": 0,
++ "timestamp": 61,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "JobRegistry initialized with admin: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "init"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "post_job: id {} client {} budget {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "submit_bid: id {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "accept_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 16
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 16
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 16
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 16
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 16
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "accept_bid"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 16
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_accept_without_matching_bid_panics.1.json b/contracts/job_registry/test_snapshots/test/test_accept_without_matching_bid_panics.1.json
+index 931a41d..25cb10f 100644
+--- a/contracts/job_registry/test_snapshots/test/test_accept_without_matching_bid_panics.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_accept_without_matching_bid_panics.1.json
+@@ -44,8 +44,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -139,7 +145,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 1
+@@ -159,7 +165,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 1
+@@ -168,7 +174,7 @@
+ },
+ "durability": "persistent",
+ "val": {
+- "vec": []
++ "u32": 0
+ }
+ }
+ },
+@@ -214,6 +220,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -221,7 +235,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -233,6 +247,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -388,34 +410,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+@@ -475,44 +470,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "post_job: id {} client {} budget {}"
+- },
+- {
+- "u64": 1
+ },
+ {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ "u64": 30
+ },
+ {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
++ "u64": 60
+ }
+ ]
+ }
+@@ -537,17 +502,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
+- }
+- ]
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_budget_above_maximum_panics.1.json b/contracts/job_registry/test_snapshots/test/test_budget_above_maximum_panics.1.json
+new file mode 100644
+index 0000000..12aa8f4
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_budget_above_maximum_panics.1.json
+@@ -0,0 +1,432 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000000000001
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 4
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "post_job"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000000000001
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_budget_at_maximum_succeeds.1.json b/contracts/job_registry/test_snapshots/test/test_budget_at_maximum_succeeds.1.json
+new file mode 100644
+index 0000000..e19fe24
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_budget_at_maximum_succeeds.1.json
+@@ -0,0 +1,645 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000000000000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": []
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000000000000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000000000000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000000000000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_budget_at_minimum_succeeds.1.json b/contracts/job_registry/test_snapshots/test/test_budget_at_minimum_succeeds.1.json
+new file mode 100644
+index 0000000..495b161
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_budget_at_minimum_succeeds.1.json
+@@ -0,0 +1,645 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": []
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_budget_below_minimum_panics.1.json b/contracts/job_registry/test_snapshots/test/test_budget_below_minimum_panics.1.json
+new file mode 100644
+index 0000000..07bafa7
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_budget_below_minimum_panics.1.json
+@@ -0,0 +1,432 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 99999
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 4
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "post_job"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 99999
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_cancel_expired_job_before_expiration_panics.1.json b/contracts/job_registry/test_snapshots/test/test_cancel_expired_job_before_expiration_panics.1.json
+new file mode 100644
+index 0000000..accc297
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_cancel_expired_job_before_expiration_panics.1.json
+@@ -0,0 +1,716 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": []
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "cancel_expired_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 18
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 18
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 18
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 18
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 18
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "cancel_expired_job"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 18
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_cancel_expired_job_by_client.1.json b/contracts/job_registry/test_snapshots/test/test_cancel_expired_job_by_client.1.json
+new file mode 100644
+index 0000000..19e3628
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_cancel_expired_job_by_client.1.json
+@@ -0,0 +1,813 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "cancel_expired_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "sequence_number": 0,
++ "timestamp": 61,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Expired"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "JobRegistry initialized with admin: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "init"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "post_job: id {} client {} budget {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "cancel_expired_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "cancel_expired_job: id {} client {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "expired"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "cancel_expired_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Expired"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_double_initialize_panics.1.json b/contracts/job_registry/test_snapshots/test/test_double_initialize_panics.1.json
+index 364f920..e4944ad 100644
+--- a/contracts/job_registry/test_snapshots/test/test_double_initialize_panics.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_double_initialize_panics.1.json
+@@ -188,34 +188,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_duplicate_bid_panics.1.json b/contracts/job_registry/test_snapshots/test/test_duplicate_bid_panics.1.json
+index 28f0fdc..13cd329 100644
+--- a/contracts/job_registry/test_snapshots/test/test_duplicate_bid_panics.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_duplicate_bid_panics.1.json
+@@ -44,8 +44,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -71,6 +77,12 @@
+ },
+ {
+ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
+ }
+ ]
+ }
+@@ -229,6 +241,25 @@
+ "vec": [
+ {
+ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -293,6 +324,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -300,7 +339,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -312,6 +351,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -467,34 +514,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+@@ -554,44 +574,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "post_job: id {} client {} budget {}"
+ },
+ {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ "u64": 30
+ },
+ {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
++ "u64": 60
+ }
+ ]
+ }
+@@ -616,17 +606,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
+- }
+- ]
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+@@ -682,36 +662,12 @@
+ },
+ {
+ "bytes": "516d50726f706f73616c"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "submit_bid: id {} freelancer {}"
+- },
+- {
+- "u64": 1
+ },
+ {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
+ }
+ ]
+ }
+@@ -792,6 +748,12 @@
+ },
+ {
+ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
+ }
+ ]
+ }
+@@ -917,6 +879,12 @@
+ },
+ {
+ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
+ }
+ ]
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_empty_hash_panics.1.json b/contracts/job_registry/test_snapshots/test/test_empty_hash_panics.1.json
+index 341afb7..345a555 100644
+--- a/contracts/job_registry/test_snapshots/test/test_empty_hash_panics.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_empty_hash_panics.1.json
+@@ -188,34 +188,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+@@ -275,8 +248,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -406,8 +385,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_full_lifecycle.1.json b/contracts/job_registry/test_snapshots/test/test_full_lifecycle.1.json
+index 7966029..e066e00 100644
+--- a/contracts/job_registry/test_snapshots/test/test_full_lifecycle.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_full_lifecycle.1.json
+@@ -44,8 +44,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -72,6 +78,12 @@
+ },
+ {
+ "bytes": "516d50726f706f73616c48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
+ }
+ ]
+ }
+@@ -349,6 +361,25 @@
+ "vec": [
+ {
+ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -458,6 +489,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -465,7 +504,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -477,6 +516,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -634,34 +681,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+@@ -721,44 +741,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "post_job: id {} client {} budget {}"
+ },
+ {
+- "u64": 1
++ "u64": 30
+ },
+ {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
++ "u64": 60
+ }
+ ]
+ }
+@@ -783,17 +773,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
+- }
+- ]
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+@@ -864,6 +844,14 @@
+ ],
+ "data": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -871,7 +859,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -883,6 +871,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -944,36 +940,12 @@
+ },
+ {
+ "bytes": "516d50726f706f73616c48617368"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "submit_bid: id {} freelancer {}"
+ },
+ {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
+ }
+ ]
+ }
+@@ -1071,6 +1043,25 @@
+ "vec": [
+ {
+ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -1132,39 +1123,6 @@
+ },
+ "failed_call": false
+ },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "accept_bid: id {} client {} freelancer {}"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1252,6 +1210,14 @@
+ ],
+ "data": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -1259,7 +1225,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -1271,6 +1237,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -1294,7 +1268,7 @@
+ "val": {
+ "vec": [
+ {
+- "symbol": "InProgress"
++ "symbol": "Assigned"
+ }
+ ]
+ }
+@@ -1342,36 +1316,6 @@
+ },
+ "failed_call": false
+ },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "submit_deliverable: id {} freelancer {}"
+- },
+- {
+- "u64": 1
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+ {
+ "event": {
+ "ext": "v0",
+@@ -1459,6 +1403,14 @@
+ ],
+ "data": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -1466,7 +1418,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -1478,6 +1430,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+diff --git a/contracts/job_registry/test_snapshots/test/test_get_bids_count_after_submissions.1.json b/contracts/job_registry/test_snapshots/test/test_get_bids_count_after_submissions.1.json
+new file mode 100644
+index 0000000..213502f
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_get_bids_count_after_submissions.1.json
+@@ -0,0 +1,1151 @@
++{
++ "generators": {
++ "address": 7,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_bids_count"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_bids_count"
++ }
++ ],
++ "data": {
++ "u32": 3
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_get_bids_count_empty_returns_zero.1.json b/contracts/job_registry/test_snapshots/test/test_get_bids_count_empty_returns_zero.1.json
+new file mode 100644
+index 0000000..71b1e1f
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_get_bids_count_empty_returns_zero.1.json
+@@ -0,0 +1,583 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": []
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_bids_count"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_bids_count"
++ }
++ ],
++ "data": {
++ "u32": 0
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_get_bids_for_missing_job_panics.1.json b/contracts/job_registry/test_snapshots/test/test_get_bids_for_missing_job_panics.1.json
+new file mode 100644
+index 0000000..132eda6
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_get_bids_for_missing_job_panics.1.json
+@@ -0,0 +1,419 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "JobRegistry initialized with admin: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "init"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_bids"
++ }
++ ],
++ "data": {
++ "u64": 404
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 7
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 7
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 7
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 7
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 7
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "get_bids"
++ },
++ {
++ "vec": [
++ {
++ "u64": 404
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 7
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_get_bids_page_first_window.1.json b/contracts/job_registry/test_snapshots/test/test_get_bids_page_first_window.1.json
+new file mode 100644
+index 0000000..49f7a8f
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_get_bids_page_first_window.1.json
+@@ -0,0 +1,1657 @@
++{
++ "generators": {
++ "address": 9,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_bids_page"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ },
++ {
++ "u32": 3
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_bids_page"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_get_bids_page_offset_beyond_end_returns_empty.1.json b/contracts/job_registry/test_snapshots/test/test_get_bids_page_offset_beyond_end_returns_empty.1.json
+new file mode 100644
+index 0000000..b962649
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_get_bids_page_offset_beyond_end_returns_empty.1.json
+@@ -0,0 +1,1161 @@
++{
++ "generators": {
++ "address": 7,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_bids_page"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 10
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_bids_page"
++ }
++ ],
++ "data": {
++ "vec": []
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_get_bids_page_second_window.1.json b/contracts/job_registry/test_snapshots/test/test_get_bids_page_second_window.1.json
+new file mode 100644
+index 0000000..034ea95
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_get_bids_page_second_window.1.json
+@@ -0,0 +1,1618 @@
++{
++ "generators": {
++ "address": 9,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4270020994084947596
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 8370022561469687789
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_bids_page"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "u32": 3
++ },
++ {
++ "u32": 3
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_bids_page"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_get_deliverable_without_submission_panics.1.json b/contracts/job_registry/test_snapshots/test/test_get_deliverable_without_submission_panics.1.json
+index 393eec5..cdef311 100644
+--- a/contracts/job_registry/test_snapshots/test/test_get_deliverable_without_submission_panics.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_get_deliverable_without_submission_panics.1.json
+@@ -44,8 +44,11 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -139,7 +142,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 1
+@@ -159,7 +162,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 1
+@@ -168,7 +171,7 @@
+ },
+ "durability": "persistent",
+ "val": {
+- "vec": []
++ "u32": 0
+ }
+ }
+ },
+@@ -214,6 +217,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 100
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -221,7 +232,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -233,6 +244,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -475,8 +494,11 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -511,7 +533,7 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ ]
+@@ -544,7 +566,7 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ ]
+diff --git a/contracts/job_registry/test_snapshots/test/test_initialize_bootstraps_storage.1.json b/contracts/job_registry/test_snapshots/test/test_initialize_bootstraps_storage.1.json
+index f42f18a..28ac159 100644
+--- a/contracts/job_registry/test_snapshots/test/test_initialize_bootstraps_storage.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_initialize_bootstraps_storage.1.json
+@@ -190,34 +190,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_invalid_budget_panics.1.json b/contracts/job_registry/test_snapshots/test/test_invalid_budget_panics.1.json
+index 92059e9..b97714f 100644
+--- a/contracts/job_registry/test_snapshots/test/test_invalid_budget_panics.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_invalid_budget_panics.1.json
+@@ -188,34 +188,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+@@ -277,6 +250,12 @@
+ "hi": 0,
+ "lo": 0
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -408,6 +387,12 @@
+ "hi": 0,
+ "lo": 0
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_late_bid_after_acceptance_panics_with_job_not_open.1.json b/contracts/job_registry/test_snapshots/test/test_late_bid_after_acceptance_panics_with_job_not_open.1.json
+new file mode 100644
+index 0000000..5941fed
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_late_bid_after_acceptance_panics_with_job_not_open.1.json
+@@ -0,0 +1,1244 @@
++{
++ "generators": {
++ "address": 5,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "accept_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidByIndex"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidByIndex"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidCount"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidCount"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "u32": 1
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidLookup"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidLookup"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Assigned"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "JobRegistry initialized with admin: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "init"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "post_job: id {} client {} budget {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "submit_bid: id {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "accept_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "accept_bid: id {} client {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "accept"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "accept_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d4c61746550726f706f73616c"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 8
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 8
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 8
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 8
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 8
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "submit_bid"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "bytes": "516d4c61746550726f706f73616c"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 8
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_assigned.1.json b/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_assigned.1.json
+new file mode 100644
+index 0000000..05aa28d
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_assigned.1.json
+@@ -0,0 +1,1076 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "accept_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "mark_disputed",
++ "args": [
++ {
++ "u64": 1
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": [
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Disputed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "accept_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "accept"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "accept_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "mark_disputed"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "mark_disputed"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Disputed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_in_progress.1.json b/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_in_progress.1.json
+index 34ff79e..0201b47 100644
+--- a/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_in_progress.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_in_progress.1.json
+@@ -46,6 +46,9 @@
+ "hi": 0,
+ "lo": 5000
+ }
++ },
++ {
++ "u64": 100
+ }
+ ]
+ }
+@@ -71,6 +74,12 @@
+ },
+ {
+ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 50
++ }
+ }
+ ]
+ }
+@@ -339,6 +348,25 @@
+ "vec": [
+ {
+ "map": [
++ {
++ "key": {
++ "symbol": "collateral_released"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "collateral_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 50
++ }
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -403,6 +431,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 100
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -668,6 +704,9 @@
+ "hi": 0,
+ "lo": 5000
+ }
++ },
++ {
++ "u64": 100
+ }
+ ]
+ }
+@@ -794,6 +833,12 @@
+ },
+ {
+ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 50
++ }
+ }
+ ]
+ }
+@@ -1127,6 +1172,14 @@
+ ],
+ "data": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 100
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+diff --git a/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_open_panics.1.json b/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_open_panics.1.json
+index e0db2e6..26431f4 100644
+--- a/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_open_panics.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_mark_disputed_from_open_panics.1.json
+@@ -44,8 +44,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -139,7 +145,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 1
+@@ -159,7 +165,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 1
+@@ -168,7 +174,7 @@
+ },
+ "durability": "persistent",
+ "val": {
+- "vec": []
++ "u32": 0
+ }
+ }
+ },
+@@ -214,6 +220,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -221,7 +235,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -233,6 +247,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -388,34 +410,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+@@ -475,44 +470,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "post_job: id {} client {} budget {}"
+- },
+- {
+- "u64": 1
+ },
+ {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ "u64": 30
+ },
+ {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
++ "u64": 60
+ }
+ ]
+ }
+@@ -537,17 +502,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
+- }
+- ]
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_oversized_cid_panics_with_invalid_hash.1.json b/contracts/job_registry/test_snapshots/test/test_oversized_cid_panics_with_invalid_hash.1.json
+new file mode 100644
+index 0000000..f525281
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_oversized_cid_panics_with_invalid_hash.1.json
+@@ -0,0 +1,447 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "JobRegistry initialized with admin: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "init"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 5
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 5
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 5
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 5
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "post_job"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 5
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_post_job_auto_allocates_sequential_ids.1.json b/contracts/job_registry/test_snapshots/test/test_post_job_auto_allocates_sequential_ids.1.json
+index 502e078..4d4caf7 100644
+--- a/contracts/job_registry/test_snapshots/test/test_post_job_auto_allocates_sequential_ids.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_post_job_auto_allocates_sequential_ids.1.json
+@@ -41,8 +41,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -69,8 +75,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 7000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -197,7 +209,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 1
+@@ -217,7 +229,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 1
+@@ -226,7 +238,7 @@
+ },
+ "durability": "persistent",
+ "val": {
+- "vec": []
++ "u32": 0
+ }
+ }
+ },
+@@ -242,7 +254,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 2
+@@ -262,7 +274,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 2
+@@ -271,7 +283,7 @@
+ },
+ "durability": "persistent",
+ "val": {
+- "vec": []
++ "u32": 0
+ }
+ }
+ },
+@@ -317,6 +329,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -324,7 +344,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -336,6 +356,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -408,6 +436,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -415,7 +451,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 7000
++ "lo": 100000
+ }
+ }
+ },
+@@ -427,6 +463,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -582,34 +626,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+@@ -666,77 +683,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "post_job_auto: id {} client {} budget {}"
+ },
+ {
+- "u64": 1
++ "u64": 30
+ },
+ {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "jobauto"
+- },
+- {
+- "u64": 1
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
++ "u64": 60
+ }
+ ]
+ }
+@@ -797,77 +751,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 7000
++ "lo": 100000
+ }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "post_job_auto: id {} client {} budget {}"
+ },
+ {
+- "u64": 2
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ "u64": 30
+ },
+ {
+- "i128": {
+- "hi": 0,
+- "lo": 7000
+- }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "jobauto"
+- },
+- {
+- "u64": 2
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 7000
+- }
++ "u64": 60
+ }
+ ]
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_post_job_before_initialize_panics.1.json b/contracts/job_registry/test_snapshots/test/test_post_job_before_initialize_panics.1.json
+index 6fdb52c..d8ac870 100644
+--- a/contracts/job_registry/test_snapshots/test/test_post_job_before_initialize_panics.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_post_job_before_initialize_panics.1.json
+@@ -104,8 +104,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -235,8 +241,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_post_job_with_explicit_id_updates_next_job_id.1.json b/contracts/job_registry/test_snapshots/test/test_post_job_with_explicit_id_updates_next_job_id.1.json
+index f5bfbf5..0052381 100644
+--- a/contracts/job_registry/test_snapshots/test/test_post_job_with_explicit_id_updates_next_job_id.1.json
++++ b/contracts/job_registry/test_snapshots/test/test_post_job_with_explicit_id_updates_next_job_id.1.json
+@@ -44,8 +44,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
+ }
+ ]
+ }
+@@ -139,7 +145,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 42
+@@ -159,7 +165,7 @@
+ "key": {
+ "vec": [
+ {
+- "symbol": "Bids"
++ "symbol": "BidCount"
+ },
+ {
+ "u64": 42
+@@ -168,7 +174,7 @@
+ },
+ "durability": "persistent",
+ "val": {
+- "vec": []
++ "u32": 0
+ }
+ }
+ },
+@@ -214,6 +220,14 @@
+ "durability": "persistent",
+ "val": {
+ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
+ {
+ "key": {
+ "symbol": "budget_stroops"
+@@ -221,7 +235,7 @@
+ "val": {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+ }
+ },
+@@ -233,6 +247,14 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
+ {
+ "key": {
+ "symbol": "freelancer"
+@@ -388,34 +410,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "string": "JobRegistry initialized with admin: {}"
+- },
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "contract",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "init"
+- }
+- ],
+- "data": {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ "string": "initialized"
+ }
+ }
+ }
+@@ -475,44 +470,14 @@
+ {
+ "i128": {
+ "hi": 0,
+- "lo": 5000
++ "lo": 100000
+ }
+- }
+- ]
+- }
+- }
+- }
+- },
+- "failed_call": false
+- },
+- {
+- "event": {
+- "ext": "v0",
+- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
+- "type_": "diagnostic",
+- "body": {
+- "v0": {
+- "topics": [
+- {
+- "symbol": "log"
+- }
+- ],
+- "data": {
+- "vec": [
+- {
+- "string": "post_job: id {} client {} budget {}"
+- },
+- {
+- "u64": 42
+ },
+ {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ "u64": 30
+ },
+ {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
++ "u64": 60
+ }
+ ]
+ }
+@@ -537,17 +502,7 @@
+ }
+ ],
+ "data": {
+- "vec": [
+- {
+- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+- },
+- {
+- "i128": {
+- "hi": 0,
+- "lo": 5000
+- }
+- }
+- ]
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+diff --git a/contracts/job_registry/test_snapshots/test/test_set_escrow_deployer_round_trip.1.json b/contracts/job_registry/test_snapshots/test/test_set_escrow_deployer_round_trip.1.json
+new file mode 100644
+index 0000000..b49d897
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_set_escrow_deployer_round_trip.1.json
+@@ -0,0 +1,452 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "set_escrow_deployer",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "EscrowDeployer"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "JobRegistry initialized with admin: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "init"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "set_escrow_deployer"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "escrow_deployer configured: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "escrow"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_escrow_deployer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_escrow_deployer"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_escrow_deployer"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_submit_bid_after_expiration_panics.1.json b/contracts/job_registry/test_snapshots/test/test_submit_bid_after_expiration_panics.1.json
+new file mode 100644
+index 0000000..5d5af4f
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_submit_bid_after_expiration_panics.1.json
+@@ -0,0 +1,734 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "sequence_number": 0,
++ "timestamp": 61,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Bids"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "vec": []
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "bidding_deadline"
++ },
++ "val": {
++ "u64": 30
++ }
++ },
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "expires_at"
++ },
++ "val": {
++ "u64": 60
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 100000
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 15
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 15
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 15
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 15
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 15
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "submit_bid"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1000
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 15
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_unauthorized_accept_bid_panics_with_specific_error.1.json b/contracts/job_registry/test_snapshots/test/test_unauthorized_accept_bid_panics_with_specific_error.1.json
+new file mode 100644
+index 0000000..f476746
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_unauthorized_accept_bid_panics_with_specific_error.1.json
+@@ -0,0 +1,1071 @@
++{
++ "generators": {
++ "address": 5,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "post_job",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_bid",
++ "args": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidByIndex"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidByIndex"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "u32": 0
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidCount"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidCount"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "u32": 1
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidLookup"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "BidLookup"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "proposal_hash"
++ },
++ "val": {
++ "bytes": "516d50726f706f73616c"
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": "void"
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d48617368"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Open"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 2
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "JobRegistry initialized with admin: {}"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "init"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "post_job: id {} client {} budget {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "jobpost"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5000
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "bytes": "516d50726f706f73616c"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "submit_bid: id {} freelancer {}"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "bid"
++ },
++ {
++ "u64": 1
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_bid"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "accept_bid"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 9
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 9
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 9
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 9
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 9
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "accept_bid"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 9
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/job_registry/test_snapshots/test/test_zero_budget_still_panics.1.json b/contracts/job_registry/test_snapshots/test/test_zero_budget_still_panics.1.json
+new file mode 100644
+index 0000000..b97714f
+--- /dev/null
++++ b/contracts/job_registry/test_snapshots/test/test_zero_budget_still_panics.1.json
+@@ -0,0 +1,432 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "initialize",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "NextJobId"
++ }
++ ]
++ },
++ "val": {
++ "u64": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "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": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "log"
++ }
++ ],
++ "data": {
++ "string": "initialized"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "post_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 4
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "post_job"
++ },
++ {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "bytes": "516d48617368"
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ },
++ {
++ "u64": 30
++ },
++ {
++ "u64": 60
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 4
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/src/lib.rs b/contracts/reputation/src/lib.rs
+index 6ec8fef..45be0c2 100644
+--- a/contracts/reputation/src/lib.rs
++++ b/contracts/reputation/src/lib.rs
+@@ -1,22 +1,26 @@
+-#![no_std]
++#![no_std]
+
+ use soroban_sdk::{
+ contract, contracterror, contractimpl, contracttype, Address, Bytes, BytesN, Env, IntoVal,
+ Symbol, Vec,
+ };
++pub use profile::BadgeLevel;
+
+ mod profile;
+ mod storage;
++pub use profile::{BadgeMetadataEntry, BadgeTier};
++
++use profile::{Profile, RoleMetrics};
+
+-// Types matching Job Registry contract's public types for cross-contract decoding
+ #[contracttype]
+ #[derive(Clone, Debug, PartialEq)]
+ pub enum JobStatus {
+ Open,
+- InProgress,
++ Assigned,
+ DeliverableSubmitted,
+ Completed,
+ Disputed,
++ Expired,
+ }
+
+ #[contracttype]
+@@ -26,7 +30,12 @@ pub struct JobRecord {
+ pub freelancer: Option,
+ pub metadata_hash: Bytes,
+ pub budget_stroops: i128,
++ pub expires_at: u64,
+ pub status: JobStatus,
++ pub bid_deadline: u64,
++ pub collateral_token: Address,
++ pub collateral_amount: i128,
++ pub collateral_locked: bool,
+ }
+
+ #[contracttype]
+@@ -41,13 +50,15 @@ pub enum Role {
+ pub struct ReputationScore {
+ pub address: Address,
+ pub role: Role,
+- /// Score in basis points (0–10000 = 0–100%)
+ pub score: i32,
+ pub total_jobs: u32,
+- /// Sum of raw rating points (1-5) to compute aggregates off-chain
+- pub total_points: i32,
+- /// Number of reviews counted
++ pub total_points: i128,
+ pub reviews: u32,
++ /// Active badge level
++ pub badge_level: u32,
++ pub average_rating_bps: i32,
++ pub badge_level: u32,
++ pub blacklisted: bool,
+ }
+
+ #[contracttype]
+@@ -56,13 +67,16 @@ pub struct ReputationView {
+ pub address: Address,
+ pub client: ReputationScore,
+ pub freelancer: ReputationScore,
++ pub is_blacklisted: bool,
+ }
+
+ #[contracttype]
+ pub enum DataKey {
+ Admin,
+ JobRegistry,
++ AuthorizedUpdater,
+ Reviewed(u64, Address),
++ AuthorizedContract(Address),
+ }
+
+ #[contracterror]
+@@ -75,6 +89,7 @@ pub enum ReputationError {
+ NotJobParticipant = 5,
+ AlreadyReviewed = 6,
+ ContractStateError = 7,
++ Blacklisted = 8,
+ }
+
+ #[contracttype]
+@@ -95,8 +110,11 @@ pub struct ReputationUpdatedEvent {
+ pub rating: u32,
+ pub new_score: i32,
+ pub total_jobs: u32,
+- pub total_points: i32,
++ pub total_points: i128,
+ pub reviews: u32,
++ pub average_rating_bps: i32,
++ pub badge_level: u32,
++ pub blacklisted: bool,
+ pub updated_at: u64,
+ }
+
+@@ -108,9 +126,28 @@ pub struct ScoreAdjustedEvent {
+ pub delta: i32,
+ pub new_score: i32,
+ pub total_jobs: u32,
++ pub badge_level: u32,
+ pub adjusted_at: u64,
+ }
+
++#[contracttype]
++#[derive(Clone)]
++pub struct AuthorizedContractUpdatedEvent {
++ pub by_admin: Address,
++ pub contract_address: Address,
++ pub updated_at: u64,
++}
++
++#[contracttype]
++#[derive(Clone)]
++pub struct BlacklistUpdatedEvent {
++ pub address: Address,
++ pub is_blacklisted: bool,
++ pub client_score: i32,
++ pub freelancer_score: i32,
++ pub updated_at: u64,
++}
++
+ #[contract]
+ pub struct ReputationContract;
+
+@@ -120,6 +157,11 @@ impl ReputationContract {
+ const INSTANCE_TTL_EXTEND_TO: u32 = 150_000;
+ const PERSISTENT_TTL_THRESHOLD: u32 = 50_000;
+ const PERSISTENT_TTL_EXTEND_TO: u32 = 150_000;
++ const SCORE_SCALE: i128 = 10_000;
++ const MAX_RATING: i128 = 5;
++ const DEFAULT_SCORE_BPS: i32 = 5_000;
++ const SLASH_DECAY_BPS: i32 = 8_000;
++ const BLACKLIST_DECAY_BPS: i32 = 1_000;
+
+ fn bump_instance_ttl(env: &Env) {
+ env.storage()
+@@ -127,36 +169,156 @@ impl ReputationContract {
+ .extend_ttl(Self::INSTANCE_TTL_THRESHOLD, Self::INSTANCE_TTL_EXTEND_TO);
+ }
+
+- fn score_from_rating(score: u32) -> i32 {
+- (score as i32).saturating_mul(2_000)
++ fn clamp_score(value: i32) -> i32 {
++ value.clamp(0, 10_000)
++ }
++
++ fn clamp_score_i128(value: i128) -> i32 {
++ Self::clamp_score(value.clamp(0, Self::SCORE_SCALE) as i32)
++ }
++
++ fn read_admin(env: &Env) -> Address {
++ env.storage()
++ .instance()
++ .get(&DataKey::Admin)
++ .unwrap_or_else(|| soroban_sdk::panic_with_error!(env, ReputationError::NotInitialized))
++ }
++
++ fn read_authorized_updater(env: &Env) -> Address {
++ env.storage()
++ .instance()
++ .get(&DataKey::AuthorizedUpdater)
++ .unwrap_or_else(|| soroban_sdk::panic_with_error!(env, ReputationError::NotInitialized))
++ }
++
++ fn read_job_registry(env: &Env) -> Address {
++ env.storage()
++ .instance()
++ .get(&DataKey::JobRegistry)
++ .unwrap_or_else(|| soroban_sdk::panic_with_error!(env, ReputationError::NotInitialized))
++ }
++
++ fn require_admin(env: &Env, admin: &Address) {
++ let configured_admin = Self::read_admin(env);
++ admin.require_auth();
++ if *admin != configured_admin {
++ soroban_sdk::panic_with_error!(env, ReputationError::Unauthorized);
++ }
++ }
++
++ fn require_authorized_contract(env: &Env, caller_contract: &Address) {
++ let authorized_contract = Self::read_authorized_updater(env);
++ caller_contract.require_auth();
++ if *caller_contract != authorized_contract {
++ soroban_sdk::panic_with_error!(env, ReputationError::Unauthorized);
++ }
++ }
++
++ fn role_metrics<'a>(profile: &'a Profile, role: &Role) -> &'a RoleMetrics {
++ match role {
++ Role::Client => &profile.client,
++ Role::Freelancer => &profile.freelancer,
++ }
++ }
++
++ fn role_metrics_mut<'a>(profile: &'a mut Profile, role: &Role) -> &'a mut RoleMetrics {
++ match role {
++ Role::Client => &mut profile.client,
++ Role::Freelancer => &mut profile.freelancer,
++ }
+ }
+
+ fn score_from_profile(
+ address: &Address,
+ role: Role,
+- profile: &profile::Profile,
++ profile: &Profile,
+ ) -> ReputationScore {
+- match role {
+- Role::Client => ReputationScore {
+- address: address.clone(),
+- role: Role::Client,
+- score: profile.client_score,
+- total_jobs: profile.client_jobs,
+- total_points: profile.client_points,
+- reviews: profile.client_jobs,
+- },
+- Role::Freelancer => ReputationScore {
+- address: address.clone(),
+- role: Role::Freelancer,
+- score: profile.freelancer_score,
+- total_jobs: profile.freelancer_jobs,
+- total_points: profile.freelancer_points,
+- reviews: profile.freelancer_jobs,
+- },
++ let metrics = Self::role_metrics(profile, &role);
++ ReputationScore {
++ address: address.clone(),
++ role,
++ score: metrics.score,
++ total_jobs: metrics.completed_jobs,
++ total_points: metrics.review.total_points,
++ reviews: metrics.review.reviews,
++ average_rating_bps: metrics.review.average_rating_bps,
++ badge_level: metrics.badge_level,
++ blacklisted: profile.is_blacklisted,
+ }
+ }
+
+- /// Upgrades the current contract WASM. Only callable by admin.
++ fn checked_add_points(env: &Env, current: i128, incoming: u32) -> i128 {
++ current
++ .checked_add(incoming as i128)
++ .unwrap_or_else(|| soroban_sdk::panic_with_error!(env, ReputationError::ContractStateError))
++ }
++
++ fn average_rating_bps(env: &Env, total_points: i128, reviews: u32) -> i32 {
++ if reviews == 0 {
++ return Self::DEFAULT_SCORE_BPS;
++ }
++
++ let numerator = total_points
++ .checked_mul(Self::SCORE_SCALE)
++ .unwrap_or_else(|| soroban_sdk::panic_with_error!(env, ReputationError::ContractStateError));
++ let denominator = (reviews as i128)
++ .checked_mul(Self::MAX_RATING)
++ .unwrap_or_else(|| soroban_sdk::panic_with_error!(env, ReputationError::ContractStateError));
++
++ if denominator == 0 {
++ return Self::DEFAULT_SCORE_BPS;
++ }
++
++ Self::clamp_score_i128(numerator / denominator)
++ }
++
++ fn apply_decay_bps(env: &Env, score: i32, decay_bps: i32) -> i32 {
++ let decayed = (score as i128)
++ .checked_mul(decay_bps as i128)
++ .unwrap_or_else(|| soroban_sdk::panic_with_error!(env, ReputationError::ContractStateError))
++ / Self::SCORE_SCALE;
++ Self::clamp_score_i128(decayed)
++ }
++
++ fn badge_level(metrics: &RoleMetrics, is_blacklisted: bool) -> u32 {
++ if is_blacklisted {
++ 0
++ } else if metrics.completed_jobs >= 15 && metrics.score >= 9_000 {
++ 3
++ } else if metrics.completed_jobs >= 7 && metrics.score >= 8_000 {
++ 2
++ } else if metrics.completed_jobs >= 3 && metrics.score >= 6_000 {
++ 1
++ } else {
++ 0
++ }
++ }
++
++ fn refresh_badge(metrics: &mut RoleMetrics, is_blacklisted: bool) {
++ metrics.badge_level = Self::badge_level(metrics, is_blacklisted);
++ }
++
++ fn apply_review(env: &Env, metrics: &mut RoleMetrics, score: u32, is_blacklisted: bool) {
++ metrics.review.total_points =
++ Self::checked_add_points(env, metrics.review.total_points, score);
++ metrics.review.reviews = metrics.review.reviews.saturating_add(1);
++ metrics.completed_jobs = metrics.completed_jobs.saturating_add(1);
++ metrics.review.average_rating_bps =
++ Self::average_rating_bps(env, metrics.review.total_points, metrics.review.reviews);
++ metrics.score = metrics.review.average_rating_bps;
++ Self::refresh_badge(metrics, is_blacklisted);
++ }
++
++ fn apply_manual_delta(metrics: &mut RoleMetrics, delta: i32, is_blacklisted: bool) {
++ metrics.score = Self::clamp_score(metrics.score.saturating_add(delta));
++ Self::refresh_badge(metrics, is_blacklisted);
++ }
++
++ fn apply_role_decay(env: &Env, metrics: &mut RoleMetrics, decay_bps: i32, is_blacklisted: bool) {
++ metrics.score = Self::apply_decay_bps(env, metrics.score, decay_bps);
++ Self::refresh_badge(metrics, is_blacklisted);
++ }
++
+ pub fn upgrade(
+ env: Env,
+ caller: Address,
+@@ -165,12 +327,7 @@ impl ReputationContract {
+ Self::bump_instance_ttl(&env);
+ caller.require_auth();
+
+- let admin: Address = env
+- .storage()
+- .instance()
+- .get(&DataKey::Admin)
+- .ok_or(ReputationError::NotInitialized)?;
+-
++ let admin = Self::read_admin(&env);
+ if caller != admin {
+ return Err(ReputationError::Unauthorized);
+ }
+@@ -197,23 +354,69 @@ impl ReputationContract {
+ Self::bump_instance_ttl(&env);
+ }
+
+- /// Set the JobRegistry contract address (admin only)
+ pub fn set_job_registry(env: Env, admin: Address, registry: Address) {
++ Self::require_admin(&env, &admin);
++ env.storage().instance().set(&DataKey::JobRegistry, ®istry);
++ Self::bump_instance_ttl(&env);
++ }
++
++ pub fn set_authorized_contract(env: Env, admin: Address, contract_address: Address) {
++ Self::require_admin(&env, &admin);
++ env.storage()
++ .instance()
++ .set(&DataKey::AuthorizedUpdater, &contract_address);
++ env.events().publish(
++ ("reputation", "AuthorizedContractUpdated"),
++ AuthorizedContractUpdatedEvent {
++ by_admin: admin,
++ contract_address,
++ updated_at: env.ledger().timestamp(),
++ },
++ );
++ Self::bump_instance_ttl(&env);
++ }
++
++ /// Authorize a contract address (admin only)
++ pub fn authorize_contract(env: Env, admin: Address, contract: Address) {
++ admin.require_auth();
+ let configured_admin: Address = env
+ .storage()
+ .instance()
+ .get(&DataKey::Admin)
+ .expect("not initialized");
++ assert!(admin == configured_admin, "only admin can authorize contracts");
++
++ env.storage()
++ .instance()
++ .set(&DataKey::AuthorizedContract(contract), &true);
++ Self::bump_instance_ttl(&env);
++ }
+
++ /// Deauthorize a contract address (admin only)
++ pub fn deauthorize_contract(env: Env, admin: Address, contract: Address) {
+ admin.require_auth();
+- assert!(admin == configured_admin, "only admin can set job registry");
++ let configured_admin: Address = env
++ .storage()
++ .instance()
++ .get(&DataKey::Admin)
++ .expect("not initialized");
++ assert!(admin == configured_admin, "only admin can deauthorize contracts");
+
+ env.storage()
+ .instance()
+- .set(&DataKey::JobRegistry, ®istry);
++ .remove(&DataKey::AuthorizedContract(contract));
+ Self::bump_instance_ttl(&env);
+ }
+
++ /// Check if a contract is authorized
++ pub fn is_contract_authorized(env: Env, contract: Address) -> bool {
++ Self::bump_instance_ttl(&env);
++ env.storage()
++ .instance()
++ .get(&DataKey::AuthorizedContract(contract))
++ .unwrap_or(false)
++ }
++
+ /// Submit a rating for a target address tied to a Job ID. Caller must be the client or freelancer
+ /// on the job, and the job must be Completed.
+ pub fn submit_rating(env: Env, caller: Address, job_id: u64, target: Address, score: u32) {
+@@ -222,12 +425,7 @@ impl ReputationContract {
+ soroban_sdk::panic_with_error!(&env, ReputationError::InvalidInput);
+ }
+
+- let registry_addr: Address = env
+- .storage()
+- .instance()
+- .get(&DataKey::JobRegistry)
+- .expect("job registry not set");
+-
++ let registry_addr = Self::read_job_registry(&env);
+ let get_sym = Symbol::new(&env, "get_job");
+ let args = soroban_sdk::vec![&env, job_id.into_val(&env)];
+ let job: JobRecord = env
+@@ -245,9 +443,10 @@ impl ReputationContract {
+ let caller_addr = caller.clone();
+ let is_client = caller_addr == job.client;
+ let is_freelancer = match job.freelancer.clone() {
+- Some(f) => caller_addr == f,
++ Some(freelancer) => caller_addr == freelancer,
+ None => false,
+ };
++
+ if !(is_client || is_freelancer) {
+ soroban_sdk::panic_with_error!(&env, ReputationError::Unauthorized);
+ }
+@@ -258,33 +457,38 @@ impl ReputationContract {
+ }
+
+ let mut profile = storage::read_profile_or_default(&env, &target);
+- let (role, total_points, total_jobs, new_score) = if target == job.client {
+- profile.client_points = profile.client_points.saturating_add(score as i32);
+- profile.client_jobs = profile.client_jobs.saturating_add(1);
+- let avg = profile.client_points / (profile.client_jobs as i32);
+- let bps = Self::score_from_rating(avg as u32);
+- profile.client_score = Self::clamp_score(bps);
+- (
+- Role::Client,
+- profile.client_points,
+- profile.client_jobs,
+- profile.client_score,
+- )
+- } else if job.freelancer.as_ref() == Some(&target) {
+- profile.freelancer_points = profile.freelancer_points.saturating_add(score as i32);
+- profile.freelancer_jobs = profile.freelancer_jobs.saturating_add(1);
+- let avg = profile.freelancer_points / (profile.freelancer_jobs as i32);
+- let bps = Self::score_from_rating(avg as u32);
+- profile.freelancer_score = Self::clamp_score(bps);
+- (
+- Role::Freelancer,
+- profile.freelancer_points,
+- profile.freelancer_jobs,
+- profile.freelancer_score,
+- )
+- } else {
+- soroban_sdk::panic_with_error!(&env, ReputationError::NotJobParticipant);
+- };
++ if profile.is_blacklisted {
++ soroban_sdk::panic_with_error!(&env, ReputationError::Blacklisted);
++ }
++
++ let (role, total_points, total_jobs, new_score, reviews, average_rating_bps, badge_level) =
++ if target == job.client {
++ let is_blacklisted = profile.is_blacklisted;
++ Self::apply_review(&env, &mut profile.client, score, is_blacklisted);
++ (
++ Role::Client,
++ profile.client.review.total_points,
++ profile.client.completed_jobs,
++ profile.client.score,
++ profile.client.review.reviews,
++ profile.client.review.average_rating_bps,
++ profile.client.badge_level,
++ )
++ } else if job.freelancer.as_ref() == Some(&target) {
++ let is_blacklisted = profile.is_blacklisted;
++ Self::apply_review(&env, &mut profile.freelancer, score, is_blacklisted);
++ (
++ Role::Freelancer,
++ profile.freelancer.review.total_points,
++ profile.freelancer.completed_jobs,
++ profile.freelancer.score,
++ profile.freelancer.review.reviews,
++ profile.freelancer.review.average_rating_bps,
++ profile.freelancer.badge_level,
++ )
++ } else {
++ soroban_sdk::panic_with_error!(&env, ReputationError::NotJobParticipant);
++ };
+
+ storage::write_profile(&env, &target, &profile);
+ env.storage().persistent().set(&reviewed_key, &true);
+@@ -304,7 +508,10 @@ impl ReputationContract {
+ new_score,
+ total_jobs,
+ total_points,
+- reviews: total_jobs,
++ reviews,
++ average_rating_bps,
++ badge_level,
++ blacklisted: profile.is_blacklisted,
+ updated_at: env.ledger().timestamp(),
+ },
+ );
+@@ -312,89 +519,195 @@ impl ReputationContract {
+ }
+
+ /// Update reputation after a completed job. `delta` in basis points.
+- /// Score is clamped to [0, 10000].
+- pub fn update_score(env: Env, address: Address, role: Role, delta: i32) {
+- let admin: Address = env
+- .storage()
+- .instance()
+- .get(&DataKey::Admin)
+- .expect("not initialized");
+- admin.require_auth();
++ /// Score is clamped to [0, 10000]. Only callable by admin or authorized contract address.
++ pub fn update_score(env: Env, caller_contract: Address, address: Address, role: Role, delta: i32) {
++ Self::require_authorized_contract(&env, &caller_contract);
+
+ let mut profile = storage::read_profile_or_default(&env, &address);
+- let (new_score, total_jobs) = match role {
+- Role::Client => {
+- profile.client_score =
+- Self::clamp_score(profile.client_score.saturating_add(delta));
+- profile.client_jobs = profile.client_jobs.saturating_add(1);
+- (profile.client_score, profile.client_jobs)
+- }
+- Role::Freelancer => {
+- profile.freelancer_score =
+- Self::clamp_score(profile.freelancer_score.saturating_add(delta));
+- profile.freelancer_jobs = profile.freelancer_jobs.saturating_add(1);
+- (profile.freelancer_score, profile.freelancer_jobs)
+- }
+- };
++ if profile.is_blacklisted {
++ soroban_sdk::panic_with_error!(&env, ReputationError::Blacklisted);
++ }
++
++ let is_blacklisted = profile.is_blacklisted;
++ let metrics = Self::role_metrics_mut(&mut profile, &role);
++ let previous_score = metrics.score;
++ metrics.completed_jobs = metrics.completed_jobs.saturating_add(1);
++ Self::apply_manual_delta(metrics, delta, is_blacklisted);
++ let new_score = metrics.score;
++ let total_jobs = metrics.completed_jobs;
++ let badge_level = metrics.badge_level;
+
++ profile.refresh_badges();
+ storage::write_profile(&env, &address, &profile);
+ env.events().publish(
+ ("reputation", "ScoreAdjusted"),
+ ScoreAdjustedEvent {
+ address,
+ role,
+- delta,
++ delta: new_score.saturating_sub(previous_score),
+ new_score,
+ total_jobs,
++ badge_level,
+ adjusted_at: env.ledger().timestamp(),
+ },
+ );
+ Self::bump_instance_ttl(&env);
+ }
+
+- /// Slash address for fraud / abandonment — reduces score by 20%.
+- pub fn slash(env: Env, address: Address, role: Role, _reason: Symbol) {
+- let admin: Address = env
+- .storage()
+- .instance()
+- .get(&DataKey::Admin)
+- .expect("not initialized");
+- admin.require_auth();
++ /// Slash address for fraud / abandonment — reduces score by 20%. Only callable by admin or authorized contract.
++ pub fn slash(env: Env, caller_contract: Address, address: Address, role: Role, _reason: Symbol) {
++ Self::require_authorized_contract(&env, &caller_contract);
+
+ let mut profile = storage::read_profile_or_default(&env, &address);
+- let (new_score, total_jobs) = match role {
+- Role::Client => {
+- profile.client_score = Self::clamp_score(profile.client_score.saturating_sub(2000));
+- (profile.client_score, profile.client_jobs)
+- }
+- Role::Freelancer => {
+- profile.freelancer_score =
+- Self::clamp_score(profile.freelancer_score.saturating_sub(2000));
+- (profile.freelancer_score, profile.freelancer_jobs)
+- }
+- };
++ if profile.is_blacklisted {
++ soroban_sdk::panic_with_error!(&env, ReputationError::Blacklisted);
++ }
+
++ let is_blacklisted = profile.is_blacklisted;
++ let metrics = Self::role_metrics_mut(&mut profile, &role);
++ let previous_score = metrics.score;
++ Self::apply_role_decay(&env, metrics, Self::SLASH_DECAY_BPS, is_blacklisted);
++ let new_score = metrics.score;
++ let total_jobs = metrics.completed_jobs;
++ let badge_level = metrics.badge_level;
++
++ profile.refresh_badges();
+ storage::write_profile(&env, &address, &profile);
+ env.events().publish(
+ ("reputation", "ScoreAdjusted"),
+ ScoreAdjustedEvent {
+ address,
+ role,
+- delta: -2_000,
++ delta: new_score.saturating_sub(previous_score),
+ new_score,
+ total_jobs,
++ badge_level,
+ adjusted_at: env.ledger().timestamp(),
+ },
+ );
+ Self::bump_instance_ttl(&env);
+ }
+
++ pub fn blacklist_profile(env: Env, caller_contract: Address, address: Address, _reason: Symbol) {
++ Self::require_authorized_contract(&env, &caller_contract);
++
++ let mut profile = storage::read_profile_or_default(&env, &address);
++ if !profile.is_blacklisted {
++ profile.is_blacklisted = true;
++ let is_blacklisted = profile.is_blacklisted;
++ Self::apply_role_decay(&env, &mut profile.client, Self::BLACKLIST_DECAY_BPS, is_blacklisted);
++ Self::apply_role_decay(
++ &env,
++ &mut profile.freelancer,
++ Self::BLACKLIST_DECAY_BPS,
++ is_blacklisted,
++ );
++ }
++
++ let client_score = profile.client.score;
++ let freelancer_score = profile.freelancer.score;
++ storage::write_profile(&env, &address, &profile);
++ env.events().publish(
++ ("reputation", "BlacklistUpdated"),
++ BlacklistUpdatedEvent {
++ address,
++ is_blacklisted: true,
++ client_score,
++ freelancer_score,
++ updated_at: env.ledger().timestamp(),
++ },
++ );
++ Self::bump_instance_ttl(&env);
++ }
++
++ pub fn is_blacklisted(env: Env, address: Address) -> bool {
++ Self::bump_instance_ttl(&env);
++ storage::read_profile(&env, &address)
++ .map(|profile| profile.is_blacklisted)
++ .unwrap_or(false)
++ }
++
++ /// Return the current badge level for an address/role pair.
++ pub fn get_badge(env: Env, address: Address, role: Role) -> BadgeLevel {
++ Self::bump_instance_ttl(&env);
++ let profile = storage::read_profile_or_default(&env, &address);
++ match role {
++ Role::Client => profile.client_badge,
++ Role::Freelancer => profile.freelancer_badge,
++ }
++ }
++
++ /// Admin-only: set the decentralised-storage URI for a badge tier.
++ /// `uri` is typically an IPFS CID pointing to the badge image/JSON.
++ pub fn set_badge_metadata(
++ env: Env,
++ admin: Address,
++ address: Address,
++ tier: BadgeTier,
++ uri: Bytes,
++ ) {
++ let configured_admin: Address = env
++ .storage()
++ .instance()
++ .get(&DataKey::Admin)
++ .expect("not initialized");
++ admin.require_auth();
++ assert!(admin == configured_admin, "unauthorized");
++
++ let mut profile = storage::read_profile_or_default(&env, &address);
++
++ // Replace existing entry for this tier or push a new one.
++ let mut found = false;
++ let len = profile.badge_metadata.len();
++ for i in 0..len {
++ let entry = profile.badge_metadata.get(i).unwrap();
++ if entry.tier == tier {
++ profile.badge_metadata.set(i, BadgeMetadataEntry { tier: tier.clone(), uri: uri.clone() });
++ found = true;
++ break;
++ }
++ }
++ if !found {
++ profile.badge_metadata.push_back(BadgeMetadataEntry { tier, uri });
++ }
++
++ storage::write_profile(&env, &address, &profile);
++ Self::bump_instance_ttl(&env);
++ }
++
++ /// Return the metadata URI for a given badge tier, or `None` if not set.
++ pub fn get_badge_metadata(
++ env: Env,
++ address: Address,
++ tier: BadgeTier,
++ ) -> Option {
++ Self::bump_instance_ttl(&env);
++ let profile = storage::read_profile_or_default(&env, &address);
++ for i in 0..profile.badge_metadata.len() {
++ let entry = profile.badge_metadata.get(i).unwrap();
++ if entry.tier == tier {
++ return Some(entry.uri);
++ }
++ }
++ None
++ }
++
+ pub fn get_score(env: Env, address: Address, role: Role) -> ReputationScore {
+ Self::bump_instance_ttl(&env);
+ let profile = storage::read_profile_or_default(&env, &address);
+ Self::score_from_profile(&address, role, &profile)
+ }
+
++ /// Get active badge level
++ pub fn get_badge_level(env: Env, address: Address, role: Role) -> u32 {
++ Self::bump_instance_ttl(&env);
++ let profile = storage::read_profile_or_default(&env, &address);
++ match role {
++ Role::Client => profile.client.badge_level,
++ Role::Freelancer => profile.freelancer.badge_level,
++ }
++ }
++
+ /// Update profile metadata hash (IPFS CID)
+ pub fn update_profile_metadata(env: Env, address: Address, metadata_hash: Bytes) {
+ address.require_auth();
+@@ -404,14 +717,13 @@ impl ReputationContract {
+ Self::bump_instance_ttl(&env);
+ }
+
+- /// Get profile metadata hash
+ pub fn get_profile_metadata(env: Env, address: Address) -> Option {
+ Self::bump_instance_ttl(&env);
+- storage::read_profile(&env, &address).and_then(|p| p.metadata_hash)
++ storage::read_profile(&env, &address).and_then(|profile| profile.metadata_hash)
+ }
+
+ /// Frontend-friendly aggregate metrics for public profile pages.
+- /// Returns: [score_bps, total_jobs, total_points, reviews]
++ /// Returns: [score_bps, total_jobs, total_points, reviews, badge_level]
+ pub fn get_public_metrics(env: Env, address: Address, role_name: Symbol) -> Vec {
+ let role = if role_name == Symbol::new(&env, "client") {
+ Role::Client
+@@ -420,17 +732,19 @@ impl ReputationContract {
+ } else {
+ soroban_sdk::panic_with_error!(&env, ReputationError::InvalidInput);
+ };
+- let rep = Self::get_score(env.clone(), address, role);
+
++ let rep = Self::get_score(env.clone(), address, role);
+ let mut metrics = Vec::new(&env);
+ metrics.push_back(rep.score as i128);
+ metrics.push_back(rep.total_jobs as i128);
+- metrics.push_back(rep.total_points as i128);
++ metrics.push_back(rep.total_points);
+ metrics.push_back(rep.reviews as i128);
++ metrics.push_back(rep.badge_level as i128);
++ metrics.push_back(rep.average_rating_bps as i128);
++ metrics.push_back(if rep.blacklisted { 1 } else { 0 });
+ metrics
+ }
+
+- /// Read both role snapshots for a single address in one call.
+ pub fn query_reputation(env: Env, address: Address) -> ReputationView {
+ Self::bump_instance_ttl(&env);
+ let profile = storage::read_profile_or_default(&env, &address);
+@@ -440,15 +754,12 @@ impl ReputationContract {
+ address,
+ client,
+ freelancer,
++ is_blacklisted: profile.is_blacklisted,
+ }
+ }
+ }
+
+-impl ReputationContract {
+- fn clamp_score(value: i32) -> i32 {
+- value.clamp(0, 10_000)
+- }
+-}
++
+
+ #[cfg(test)]
+ mod test {
+@@ -470,64 +781,308 @@ mod test {
+ env.storage().persistent().set(&MockKey::Job(job_id), &job);
+ }
+
+- pub fn get_job(env: Env, _job_id: u64) -> Result {
++ pub fn get_job(env: Env, job_id: u64) -> Result {
+ Ok(env
+ .storage()
+ .persistent()
+- .get(&MockKey::Job(_job_id))
++ .get(&MockKey::Job(job_id))
+ .expect("mock job missing"))
+ }
+ }
+
++ #[contract]
++ pub struct AuthorizedAdjuster;
++
++ #[contractimpl]
++ impl AuthorizedAdjuster {
++ pub fn award(env: Env, reputation: Address, target: Address, role: Role, delta: i32) {
++ let reputation_client = ReputationContractClient::new(&env, &reputation);
++ let caller_contract = env.current_contract_address();
++ reputation_client.update_score(&caller_contract, &target, &role, &delta);
++ }
++
++ pub fn slash(env: Env, reputation: Address, target: Address, role: Role, reason: Symbol) {
++ let reputation_client = ReputationContractClient::new(&env, &reputation);
++ let caller_contract = env.current_contract_address();
++ reputation_client.slash(&caller_contract, &target, &role, &reason);
++ }
++
++ pub fn blacklist(env: Env, reputation: Address, target: Address, reason: Symbol) {
++ let reputation_client = ReputationContractClient::new(&env, &reputation);
++ let caller_contract = env.current_contract_address();
++ reputation_client.blacklist_profile(&caller_contract, &target, &reason);
++ }
++ }
++
++ fn setup_job(
++ env: &Env,
++ registry: &Address,
++ job_id: u64,
++ client_address: &Address,
++ freelancer: &Address,
++ ) {
++ let job = JobRecord {
++ client: client_address.clone(),
++ freelancer: Some(freelancer.clone()),
++ metadata_hash: Bytes::from_slice(env, b"QmJob"),
++ budget_stroops: 10,
++ expires_at: 0,
++ status: JobStatus::Completed,
++ bid_deadline: 0,
++ collateral_token: Address::generate(env),
++ collateral_amount: 0,
++ collateral_locked: false,
++ };
++ let registry_client = MockJobRegistryClient::new(env, registry);
++ registry_client.set_job(&job_id, &job);
++ }
++
+ #[test]
+- fn test_initial_score() {
++ fn test_empty_profile_reads_are_safe() {
+ let env = Env::default();
+ let address = Address::generate(&env);
+ let contract_id = env.register_contract(None, ReputationContract);
+ let client = ReputationContractClient::new(&env, &contract_id);
+
+ let score = client.get_score(&address, &Role::Freelancer);
+- assert_eq!(score.score, 5000);
++ assert_eq!(score.score, 5_000);
+ assert_eq!(score.total_jobs, 0);
++ assert_eq!(score.total_points, 0);
++ assert_eq!(score.reviews, 0);
++ assert_eq!(score.average_rating_bps, 5_000);
++ assert_eq!(score.badge_level, 0);
++ assert!(!score.blacklisted);
++
++ let view = client.query_reputation(&address);
++ assert_eq!(view.client.score, 5_000);
++ assert_eq!(view.freelancer.score, 5_000);
++ assert!(!view.is_blacklisted);
++
++ let metadata = client.get_profile_metadata(&address);
++ assert_eq!(metadata, None);
++ }
++
++ #[test]
++ fn test_authorized_contract_updates_score() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let target = Address::generate(&env);
++ let reputation_id = env.register_contract(None, ReputationContract);
++ let adjuster_id = env.register_contract(None, AuthorizedAdjuster);
++ let client = ReputationContractClient::new(&env, &reputation_id);
++ let adjuster = AuthorizedAdjusterClient::new(&env, &adjuster_id);
++
++ client.initialize(&admin);
++ client.set_authorized_contract(&admin, &adjuster_id);
++
++ adjuster.award(&reputation_id, &target, &Role::Freelancer, &1_500);
++
++ let score = client.get_score(&target, &Role::Freelancer);
++ assert_eq!(score.score, 6_500);
++ assert_eq!(score.total_jobs, 0);
++ assert_eq!(score.badge_level, 0);
++ }
++
++ #[test]
++ fn test_slash_uses_fixed_point_decay() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let client_addr = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++ let reputation_id = env.register_contract(None, ReputationContract);
++ let registry_id = env.register_contract(None, MockJobRegistry);
++ let adjuster_id = env.register_contract(None, AuthorizedAdjuster);
++ let client = ReputationContractClient::new(&env, &reputation_id);
++ let adjuster = AuthorizedAdjusterClient::new(&env, &adjuster_id);
++
++ client.initialize(&admin);
++ client.set_job_registry(&admin, ®istry_id);
++ client.set_authorized_contract(&admin, &adjuster_id);
++
++ setup_job(&env, ®istry_id, 1, &client_addr, &freelancer);
++ client.submit_rating(&client_addr, &1, &freelancer, &5);
++
++ adjuster.slash(
++ &reputation_id,
++ &freelancer,
++ &Role::Freelancer,
++ &Symbol::new(&env, "fraud"),
++ );
++
++ let score = client.get_score(&freelancer, &Role::Freelancer);
++ assert_eq!(score.score, 8_000);
++ assert_eq!(score.badge_level, 0);
+ }
+
+ #[test]
+- fn test_update_score() {
++ fn test_badge_upgrades_reflect_immediately_in_public_getters() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+ let admin = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++ let client_one = Address::generate(&env);
++ let client_two = Address::generate(&env);
++ let client_three = Address::generate(&env);
++ let reputation_id = env.register_contract(None, ReputationContract);
++ let registry_id = env.register_contract(None, MockJobRegistry);
++ let client = ReputationContractClient::new(&env, &reputation_id);
++
++ client.initialize(&admin);
++ client.set_job_registry(&admin, ®istry_id);
++
++ setup_job(&env, ®istry_id, 11, &client_one, &freelancer);
++ setup_job(&env, ®istry_id, 12, &client_two, &freelancer);
++ setup_job(&env, ®istry_id, 13, &client_three, &freelancer);
++
++ client.submit_rating(&client_one, &11, &freelancer, &5);
++ let after_first = client.get_public_metrics(&freelancer, &Symbol::new(&env, "freelancer"));
++ assert_eq!(after_first.get(4), Some(0));
++
++ client.submit_rating(&client_two, &12, &freelancer, &5);
++ let after_second = client.get_public_metrics(&freelancer, &Symbol::new(&env, "freelancer"));
++ assert_eq!(after_second.get(4), Some(0));
++
++ client.submit_rating(&client_three, &13, &freelancer, &5);
++ let after_third = client.get_public_metrics(&freelancer, &Symbol::new(&env, "freelancer"));
++ assert_eq!(after_third.get(4), Some(1));
++ assert_eq!(after_third.get(5), Some(10_000));
++
++ let score = client.get_score(&freelancer, &Role::Freelancer);
++ assert_eq!(score.badge_level, 1);
++ assert_eq!(score.total_jobs, 3);
++ }
++
++ #[test]
++ fn test_blacklist_clears_badges_and_sets_flag() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++ let client_one = Address::generate(&env);
++ let client_two = Address::generate(&env);
++ let client_three = Address::generate(&env);
++ let reputation_id = env.register_contract(None, ReputationContract);
++ let registry_id = env.register_contract(None, MockJobRegistry);
++ let adjuster_id = env.register_contract(None, AuthorizedAdjuster);
++ let client = ReputationContractClient::new(&env, &reputation_id);
++ let adjuster = AuthorizedAdjusterClient::new(&env, &adjuster_id);
++
++ client.initialize(&admin);
++ client.set_job_registry(&admin, ®istry_id);
++ client.set_authorized_contract(&admin, &adjuster_id);
++
++ setup_job(&env, ®istry_id, 21, &client_one, &freelancer);
++ setup_job(&env, ®istry_id, 22, &client_two, &freelancer);
++ setup_job(&env, ®istry_id, 23, &client_three, &freelancer);
++
++ client.submit_rating(&client_one, &21, &freelancer, &5);
++ client.submit_rating(&client_two, &22, &freelancer, &5);
++ client.submit_rating(&client_three, &23, &freelancer, &5);
++ adjuster.blacklist(&reputation_id, &freelancer, &Symbol::new(&env, "fraud"));
++
++ let score = client.get_score(&freelancer, &Role::Freelancer);
++ assert!(score.blacklisted);
++ assert_eq!(score.score, 1_000);
++ assert_eq!(score.badge_level, 0);
++
++ let view = client.query_reputation(&freelancer);
++ assert!(view.is_blacklisted);
++ assert!(client.is_blacklisted(&freelancer));
++ }
++
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #3)")]
++ fn test_get_public_metrics_rejects_unknown_role() {
++ let env = Env::default();
+ let address = Address::generate(&env);
+ let contract_id = env.register_contract(None, ReputationContract);
+ let client = ReputationContractClient::new(&env, &contract_id);
+
++ client.get_public_metrics(&address, &Symbol::new(&env, "bogus"));
++ }
++
++ #[test]
++ fn test_submit_rating_updates_client_and_freelancer_paths() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let caller = Address::generate(&env);
++ let target = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++ let caller_two = Address::generate(&env);
++ let contract_id = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &contract_id);
+ client.initialize(&admin);
+- client.update_score(&address, &Role::Freelancer, &500);
+
+- let score = client.get_score(&address, &Role::Freelancer);
+- assert_eq!(score.score, 5500);
+- assert_eq!(score.total_jobs, 1);
++ let registry_id = env.register_contract(None, MockJobRegistry);
++ client.set_job_registry(&admin, ®istry_id);
++
++ setup_job(&env, ®istry_id, 7, &caller, &freelancer);
++ setup_job(&env, ®istry_id, 8, &caller_two, &target);
++
++ client.submit_rating(&caller, &7, &freelancer, &5);
++ let freelancer_score = client.get_score(&freelancer, &Role::Freelancer);
++ assert_eq!(freelancer_score.score, 10_000);
++ assert_eq!(freelancer_score.total_jobs, 1);
++ assert_eq!(freelancer_score.total_points, 5);
++ assert_eq!(freelancer_score.reviews, 1);
++ assert_eq!(freelancer_score.average_rating_bps, 10_000);
++ assert_eq!(freelancer_score.badge_level, 0);
++
++ client.submit_rating(&caller_two, &8, &target, &4);
++ let second_freelancer_score = client.get_score(&target, &Role::Freelancer);
++ assert_eq!(second_freelancer_score.score, 8_000);
++ assert_eq!(second_freelancer_score.total_jobs, 1);
++ assert_eq!(second_freelancer_score.total_points, 4);
++ assert_eq!(second_freelancer_score.reviews, 1);
++ assert_eq!(second_freelancer_score.average_rating_bps, 8_000);
+ }
+
+ #[test]
+- fn test_slash() {
++ #[should_panic(expected = "Error(Contract, #2)")]
++ fn test_direct_score_adjustment_requires_authorized_contract() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+ let admin = Address::generate(&env);
+- let address = Address::generate(&env);
++ let attacker = Address::generate(&env);
++ let target = Address::generate(&env);
+ let contract_id = env.register_contract(None, ReputationContract);
++ let authorized_contract = env.register_contract(None, AuthorizedAdjuster);
+ let client = ReputationContractClient::new(&env, &contract_id);
+
+ client.initialize(&admin);
+- client.slash(
+- &address,
+- &Role::Client,
+- &soroban_sdk::Symbol::new(&env, "fraud"),
+- );
++ client.set_authorized_contract(&admin, &authorized_contract);
++ client.update_score(&attacker, &target, &Role::Freelancer, &500);
++ }
+
+- let score = client.get_score(&address, &Role::Client);
+- assert_eq!(score.score, 3000); // 5000 - 2000
++ #[test]
++ #[should_panic(expected = "Error(Contract, #2)")]
++ fn test_direct_reviews_from_unverified_public_keys_are_rejected() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let attacker = Address::generate(&env);
++ let job_client = Address::generate(&env);
++ let freelancer = Address::generate(&env);
++ let contract_id = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &contract_id);
++
++ client.initialize(&admin);
++ let registry_id = env.register_contract(None, MockJobRegistry);
++ client.set_job_registry(&admin, ®istry_id);
++ setup_job(&env, ®istry_id, 33, &job_client, &freelancer);
++
++ client.submit_rating(&attacker, &33, &freelancer, &5);
+ }
+
+ #[test]
+@@ -546,127 +1101,279 @@ mod test {
+ assert_eq!(saved_hash, Some(hash));
+ }
+
++ // ΓöÇΓöÇ Issue #402: badge minting ΓöÇΓöÇ
++
+ #[test]
+- fn test_unified_storage() {
++ fn test_badge_starts_at_bronze_for_default_score() {
+ let env = Env::default();
+ env.mock_all_auths();
++ let admin = Address::generate(&env);
++ let addr = Address::generate(&env);
++ let cid = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &cid);
++ client.initialize(&admin);
++
++ // Default score is 5000 → Bronze
++ let badge = client.get_badge(&addr, &Role::Freelancer);
++ assert_eq!(badge, BadgeLevel::Bronze);
++ }
+
++ #[test]
++ fn test_badge_upgrades_to_silver_at_6000() {
++ let env = Env::default();
++ env.mock_all_auths();
+ let admin = Address::generate(&env);
+- let address = Address::generate(&env);
+- let contract_id = env.register_contract(None, ReputationContract);
+- let client = ReputationContractClient::new(&env, &contract_id);
++ let addr = Address::generate(&env);
++ let cid = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &cid);
++ client.initialize(&admin);
++ client.set_authorized_contract(&admin, &admin);
+
++ // Raise score by 1000 → 5000+1000 = 6000 → Silver
++ client.update_score(&admin, &addr, &Role::Freelancer, &1000);
++ let badge = client.get_badge(&addr, &Role::Freelancer);
++ assert_eq!(badge, BadgeLevel::Silver);
++ }
++
++ #[test]
++ fn test_badge_upgrades_to_gold_at_8000() {
++ let env = Env::default();
++ env.mock_all_auths();
++ let admin = Address::generate(&env);
++ let addr = Address::generate(&env);
++ let cid = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &cid);
+ client.initialize(&admin);
++ client.set_authorized_contract(&admin, &admin);
+
+- // Update freelancer score
+- client.update_score(&address, &Role::Freelancer, &1000);
+- // Update client score for SAME address
+- client.update_score(&address, &Role::Client, &500);
++ client.update_score(&admin, &addr, &Role::Freelancer, &3000); // 5000+3000=8000
++ assert_eq!(client.get_badge(&addr, &Role::Freelancer), BadgeLevel::Gold);
++ }
++
++ #[test]
++ fn test_slash_downgrades_badge() {
++ let env = Env::default();
++ env.mock_all_auths();
++ let admin = Address::generate(&env);
++ let addr = Address::generate(&env);
++ let cid = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &cid);
++ client.initialize(&admin);
++ client.set_authorized_contract(&admin, &admin);
++
++ // Bring to Gold first, then slash twice to drop back to Bronze
++ client.update_score(&admin, &addr, &Role::Client, &3000); // 8000 → Gold
++ assert_eq!(client.get_badge(&addr, &Role::Client), BadgeLevel::Gold);
++ client.slash(&admin, &addr, &Role::Client, &soroban_sdk::Symbol::new(&env, "fraud")); // 6000 → Silver
++ assert_eq!(client.get_badge(&addr, &Role::Client), BadgeLevel::Silver);
++ client.slash(&admin, &addr, &Role::Client, &soroban_sdk::Symbol::new(&env, "fraud")); // 4000 → Bronze
++ assert_eq!(client.get_badge(&addr, &Role::Client), BadgeLevel::Bronze);
++ }
+
+- let f_score = client.get_score(&address, &Role::Freelancer);
+- let c_score = client.get_score(&address, &Role::Client);
++ // ΓöÇΓöÇ Issue #406: badge metadata mapping ΓöÇΓöÇ
+
+- assert_eq!(f_score.score, 6000);
+- assert_eq!(c_score.score, 5500);
++ #[test]
++ fn test_set_and_get_badge_metadata() {
++ let env = Env::default();
++ env.mock_all_auths();
++ let admin = Address::generate(&env);
++ let addr = Address::generate(&env);
++ let cid = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &cid);
++ client.initialize(&admin);
++
++ let uri = Bytes::from_slice(&env, b"ipfs://QmBronzeBadge");
++ client.set_badge_metadata(&admin, &addr, &BadgeTier::Bronze, &uri);
++
++ let result = client.get_badge_metadata(&addr, &BadgeTier::Bronze);
++ assert_eq!(result, Some(uri));
+ }
+
+ #[test]
+- fn test_query_reputation_returns_both_roles() {
++ fn test_badge_metadata_returns_none_when_unset() {
+ let env = Env::default();
+ env.mock_all_auths();
++ let addr = Address::generate(&env);
++ let cid = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &cid);
+
++ let result = client.get_badge_metadata(&addr, &BadgeTier::Gold);
++ assert_eq!(result, None);
++ }
++
++ #[test]
++ fn test_badge_metadata_update_overwrites_existing() {
++ let env = Env::default();
++ env.mock_all_auths();
+ let admin = Address::generate(&env);
+- let address = Address::generate(&env);
++ let addr = Address::generate(&env);
++ let cid = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &cid);
++ client.initialize(&admin);
++
++ let uri_v1 = Bytes::from_slice(&env, b"ipfs://QmSilverV1");
++ let uri_v2 = Bytes::from_slice(&env, b"ipfs://QmSilverV2");
++ client.set_badge_metadata(&admin, &addr, &BadgeTier::Silver, &uri_v1);
++ client.set_badge_metadata(&admin, &addr, &BadgeTier::Silver, &uri_v2);
++
++ assert_eq!(client.get_badge_metadata(&addr, &BadgeTier::Silver), Some(uri_v2));
++ }
++
++ #[test]
++ fn test_multiple_tiers_stored_independently() {
++ let env = Env::default();
++ env.mock_all_auths();
++ let admin = Address::generate(&env);
++ let addr = Address::generate(&env);
++ let cid = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &cid);
++ client.initialize(&admin);
++
++ let bronze_uri = Bytes::from_slice(&env, b"ipfs://Bronze");
++ let gold_uri = Bytes::from_slice(&env, b"ipfs://Gold");
++ client.set_badge_metadata(&admin, &addr, &BadgeTier::Bronze, &bronze_uri);
++ client.set_badge_metadata(&admin, &addr, &BadgeTier::Gold, &gold_uri);
++
++ assert_eq!(client.get_badge_metadata(&addr, &BadgeTier::Bronze), Some(bronze_uri));
++ assert_eq!(client.get_badge_metadata(&addr, &BadgeTier::Gold), Some(gold_uri));
++ assert_eq!(client.get_badge_metadata(&addr, &BadgeTier::Silver), None);
++ }
++
++ #[test]
++ #[should_panic(expected = "Error(Contract, #2)")]
++ fn test_upgrade_requires_admin() {
++ let env = Env::default();
++ env.mock_all_auths();
++
++ let admin = Address::generate(&env);
++ let attacker = Address::generate(&env);
+ let contract_id = env.register_contract(None, ReputationContract);
+ let client = ReputationContractClient::new(&env, &contract_id);
+
+ client.initialize(&admin);
+- client.update_score(&address, &Role::Freelancer, &1000);
+- client.update_score(&address, &Role::Client, &500);
+-
+- let view = client.query_reputation(&address);
+- assert_eq!(view.address, address);
+- assert_eq!(view.client.score, 5500);
+- assert_eq!(view.client.total_jobs, 1);
+- assert_eq!(view.client.total_points, 0);
+- assert_eq!(view.freelancer.score, 6000);
+- assert_eq!(view.freelancer.total_jobs, 1);
+- assert_eq!(view.freelancer.total_points, 0);
++ let wasm_hash = BytesN::from_array(&env, &[0; 32]);
++ client.upgrade(&attacker, &wasm_hash);
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(Contract, #3)")]
+- fn test_get_public_metrics_rejects_unknown_role() {
++ fn test_empty_account_load_save() {
+ let env = Env::default();
+ let address = Address::generate(&env);
+ let contract_id = env.register_contract(None, ReputationContract);
+ let client = ReputationContractClient::new(&env, &contract_id);
+
+- client.get_public_metrics(&address, &soroban_sdk::Symbol::new(&env, "bogus"));
++ // Fetching score for empty account should not panic and return defaults
++ let score = client.get_score(&address, &Role::Freelancer);
++ assert_eq!(score.score, 5000);
++ assert_eq!(score.badge_level, 0);
++
++ let level = client.get_badge_level(&address, &Role::Freelancer);
++ assert_eq!(level, 0);
+ }
+
+ #[test]
+- fn test_submit_rating_updates_client_and_freelancer_paths() {
++ fn test_badge_upgrades() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+ let admin = Address::generate(&env);
+- let caller = Address::generate(&env);
+- let target = Address::generate(&env);
+- let freelancer = Address::generate(&env);
+- let caller2 = Address::generate(&env);
++ let address = Address::generate(&env);
+ let contract_id = env.register_contract(None, ReputationContract);
+ let client = ReputationContractClient::new(&env, &contract_id);
++
+ client.initialize(&admin);
++ client.set_authorized_contract(&admin, &admin);
+
+- let mock_id = env.register_contract(None, MockJobRegistry);
+- client.set_job_registry(&admin, &mock_id);
++ // Initially level 0
++ assert_eq!(client.get_badge_level(&address, &Role::Freelancer), 0);
+
+- let job = JobRecord {
+- client: caller.clone(),
+- freelancer: Some(freelancer.clone()),
+- metadata_hash: Bytes::from_slice(&env, b"QmJob"),
+- budget_stroops: 10,
+- status: JobStatus::Completed,
+- };
+- let mock_client = MockJobRegistryClient::new(&env, &mock_id);
+- mock_client.set_job(&7u64, &job);
+- let other_job = JobRecord {
+- client: caller2.clone(),
+- freelancer: Some(target.clone()),
+- metadata_hash: Bytes::from_slice(&env, b"QmJob2"),
+- budget_stroops: 10,
+- status: JobStatus::Completed,
+- };
+- mock_client.set_job(&8u64, &other_job);
++ // Level 1: score >= 6000 and completed_jobs >= 3
++ // First job: score 5500
++ client.update_score(&admin, &address, &Role::Freelancer, &500);
++ assert_eq!(client.get_badge_level(&address, &Role::Freelancer), 0);
+
+- client.submit_rating(&caller, &7u64, &freelancer, &5u32);
+- let client_score = client.get_score(&freelancer, &Role::Freelancer);
+- assert_eq!(client_score.score, 10_000);
+- assert_eq!(client_score.total_jobs, 1);
+- assert_eq!(client_score.total_points, 5);
++ // Second job: score 6000, total_jobs = 2
++ client.update_score(&admin, &address, &Role::Freelancer, &500);
++ assert_eq!(client.get_badge_level(&address, &Role::Freelancer), 0);
+
+- client.submit_rating(&caller2, &8u64, &target, &4u32);
+- let freelancer_score = client.get_score(&target, &Role::Freelancer);
+- assert_eq!(freelancer_score.score, 8_000);
+- assert_eq!(freelancer_score.total_jobs, 1);
+- assert_eq!(freelancer_score.total_points, 4);
+- assert_eq!(freelancer_score.reviews, 1);
++ // Third job: score 6500, total_jobs = 3 -> Should upgrade to level 1!
++ client.update_score(&admin, &address, &Role::Freelancer, &500);
++ assert_eq!(client.get_badge_level(&address, &Role::Freelancer), 1);
++
++ // Check public metrics
++ let metrics = client.get_public_metrics(&address, &soroban_sdk::Symbol::new(&env, "freelancer"));
++ assert_eq!(metrics.get(0).unwrap(), 6500);
++ assert_eq!(metrics.get(1).unwrap(), 3);
++ assert_eq!(metrics.get(4).unwrap(), 1);
+ }
+
+ #[test]
+- #[should_panic(expected = "Error(Contract, #2)")]
+- fn test_upgrade_requires_admin() {
++ fn test_authorized_contract_score_adjustment() {
+ let env = Env::default();
+ env.mock_all_auths();
+
+ let admin = Address::generate(&env);
+- let attacker = Address::generate(&env);
++ let authorized_contract = Address::generate(&env);
++ let unauthorized_contract = Address::generate(&env);
++ let address = Address::generate(&env);
++
+ let contract_id = env.register_contract(None, ReputationContract);
+ let client = ReputationContractClient::new(&env, &contract_id);
+
+ client.initialize(&admin);
+- let wasm_hash = BytesN::from_array(&env, &[0; 32]);
+- client.upgrade(&attacker, &wasm_hash);
++
++ // Authorize the contract
++ client.authorize_contract(&admin, &authorized_contract);
++ assert!(client.is_contract_authorized(&authorized_contract));
++ assert!(!client.is_contract_authorized(&unauthorized_contract));
++
++ // Authorized contract adjusts score
++ client.update_score(&authorized_contract, &address, &Role::Freelancer, &100);
++ let score = client.get_score(&address, &Role::Freelancer);
++ assert_eq!(score.score, 5100);
++
++ // Unauthorized contract attempt to adjust score should panic
++ let res = client.try_update_score(&unauthorized_contract, &address, &Role::Freelancer, &100);
++ assert!(res.is_err());
++
++ // Deauthorize
++ client.deauthorize_contract(&admin, &authorized_contract);
++ assert!(!client.is_contract_authorized(&authorized_contract));
++
++ // Now it should fail
++ let res2 = client.try_update_score(&authorized_contract, &address, &Role::Freelancer, &100);
++ assert!(res2.is_err());
++ }
++
++ #[test]
++ fn test_arbitrary_direct_review_rejected() {
++ 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 attacker = Address::generate(&env);
++
++ let contract_id = env.register_contract(None, ReputationContract);
++ let client = ReputationContractClient::new(&env, &contract_id);
++ client.initialize(&admin);
++
++ let mock_id = env.register_contract(None, MockJobRegistry);
++ client.set_job_registry(&admin, &mock_id);
++
++ let job = JobRecord {
++ client: client_addr.clone(),
++ freelancer: Some(freelancer_addr.clone()),
++ metadata_hash: Bytes::from_slice(&env, b"QmJob"),
++ budget_stroops: 10,
++ status: JobStatus::Completed,
++ };
++ let mock_client = MockJobRegistryClient::new(&env, &mock_id);
++ mock_client.set_job(&7u64, &job);
++
++ // Attacker who is not part of the job tries to rate the freelancer
++ let res = client.try_submit_rating(&attacker, &7u64, &freelancer_addr, &5u32);
++ assert!(res.is_err()); // should reject with unauthorized
+ }
+ }
+diff --git a/contracts/reputation/src/profile.rs b/contracts/reputation/src/profile.rs
+index 5a47aa1..77e1dfe 100644
+--- a/contracts/reputation/src/profile.rs
++++ b/contracts/reputation/src/profile.rs
+@@ -1,35 +1,121 @@
+-use soroban_sdk::{contracttype, Address, Bytes, Env};
++use soroban_sdk::{contracttype, Address, Bytes, Env};
++
++#[contracttype]
++#[derive(Clone, Debug, PartialEq)]
++pub struct ReviewAggregate {
++ pub total_points: i128,
++ pub reviews: u32,
++ pub average_rating_bps: i32,
++}
++
++impl ReviewAggregate {
++ pub fn new() -> Self {
++ Self {
++ total_points: 0,
++ reviews: 0,
++ average_rating_bps: 5_000,
++ }
++ }
++}
++
++#[contracttype]
++#[derive(Clone, Debug, PartialEq)]
++pub struct RoleMetrics {
++ pub score: i32,
++ pub completed_jobs: u32,
++ pub review: ReviewAggregate,
++ pub badge_level: u32,
++}
++
++impl RoleMetrics {
++ pub fn new() -> Self {
++ Self {
++ score: 5_000,
++ completed_jobs: 0,
++ review: ReviewAggregate::new(),
++ badge_level: 0,
++ }
++ }
++}
++
++/// Badge tier awarded based on cumulative score thresholds.
++/// Scores are in basis points (0ΓÇô10 000).
++///
++/// Thresholds:
++/// Bronze ≥ 4 000
++/// Silver ≥ 6 000
++/// Gold ≥ 8 000
++/// Platinum ≥ 9 500
++#[contracttype]
++#[derive(Clone, Debug, PartialEq, Eq)]
++pub enum BadgeLevel {
++ None,
++ Bronze,
++ Silver,
++ Gold,
++ Platinum,
++}
++
++impl BadgeLevel {
++ pub fn from_score(score: i32) -> Self {
++ match score {
++ s if s >= 9_500 => BadgeLevel::Platinum,
++ s if s >= 8_000 => BadgeLevel::Gold,
++ s if s >= 6_000 => BadgeLevel::Silver,
++ s if s >= 4_000 => BadgeLevel::Bronze,
++ _ => BadgeLevel::None,
++ }
++ }
++}
++
++/// Badge tiers keyed in the metadata map.
++#[contracttype]
++#[derive(Clone, Debug, PartialEq, Eq)]
++pub enum BadgeTier {
++ Bronze,
++ Silver,
++ Gold,
++ Platinum,
++}
++
++#[contracttype]
++#[derive(Clone, Debug, PartialEq)]
++pub struct BadgeMetadataEntry {
++ pub tier: BadgeTier,
++ /// IPFS CID (or any URI) pointing to the badge image / JSON metadata.
++ pub uri: Bytes,
++}
+
+ #[contracttype]
+ #[derive(Clone, Debug, PartialEq)]
+ pub struct Profile {
+ pub address: Address,
+- pub client_score: i32,
+- pub client_points: i32,
+- pub client_jobs: u32,
+- pub freelancer_score: i32,
+- pub freelancer_points: i32,
+- pub freelancer_jobs: u32,
++ pub client: RoleMetrics,
++ pub freelancer: RoleMetrics,
++ pub is_blacklisted: bool,
+ pub metadata_hash: Option,
++ /// Per-tier badge metadata URIs set by the admin.
++ pub badge_metadata: soroban_sdk::Vec,
++ pub client_badge: BadgeLevel,
++ pub freelancer_badge: BadgeLevel,
+ }
+
+ impl Profile {
+- pub fn new(_env: &Env, address: Address) -> Self {
++ pub fn new(env: &Env, address: Address) -> Self {
+ Self {
+ address,
+- client_score: 5000,
+- client_points: 0,
+- client_jobs: 0,
+- freelancer_score: 5000,
+- freelancer_points: 0,
+- freelancer_jobs: 0,
++ client: RoleMetrics::new(),
++ freelancer: RoleMetrics::new(),
++ is_blacklisted: false,
+ metadata_hash: None,
++ badge_metadata: soroban_sdk::Vec::new(env),
++ client_badge: BadgeLevel::Bronze,
++ freelancer_badge: BadgeLevel::Bronze,
+ }
+ }
+
+- pub fn default(_env: Env) -> Self {
+- // This is tricky because we need an address.
+- // We'll leave it to the caller to provide an address.
+- panic!("Profile needs an address; use new(env, address)")
++ pub fn refresh_badges(&mut self) {
++ self.client_badge = BadgeLevel::from_score(self.client.score);
++ self.freelancer_badge = BadgeLevel::from_score(self.freelancer.score);
+ }
+ }
+diff --git a/contracts/reputation/src/storage.rs b/contracts/reputation/src/storage.rs
+index 1c1242d..048c97f 100644
+--- a/contracts/reputation/src/storage.rs
++++ b/contracts/reputation/src/storage.rs
+@@ -1,4 +1,4 @@
+-use crate::profile::Profile;
++use crate::profile::Profile;
+ use soroban_sdk::{Address, Env};
+
+ const PERSISTENT_TTL_THRESHOLD: u32 = 50_000;
+diff --git a/contracts/reputation/test_snapshots/test/test_authorized_contract_can_be_replaced_by_admin.1.json b/contracts/reputation/test_snapshots/test/test_authorized_contract_can_be_replaced_by_admin.1.json
+new file mode 100644
+index 0000000..3aa828d
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_authorized_contract_can_be_replaced_by_admin.1.json
+@@ -0,0 +1,1094 @@
++{
++ "generators": {
++ "address": 5,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_metadata"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 7000
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "is_blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AuthorizedUpdater"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": null
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
++ },
++ {
++ "symbol": "award"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Client"
++ }
++ ]
++ },
++ {
++ "i32": 2000
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "update_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Client"
++ }
++ ]
++ },
++ {
++ "i32": 2000
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ScoreAdjusted"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "adjusted_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "delta"
++ },
++ "val": {
++ "i32": 2000
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 7000
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Client"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "update_score"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "award"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Client"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Client"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 7000
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_authorized_contract_updates_score.1.json b/contracts/reputation/test_snapshots/test/test_authorized_contract_updates_score.1.json
+new file mode 100644
+index 0000000..c08eb66
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_authorized_contract_updates_score.1.json
+@@ -0,0 +1,905 @@
++{
++ "generators": {
++ "address": 4,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_metadata"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 6500
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "is_blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AuthorizedUpdater"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "award"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "i32": 1500
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "update_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "i32": 1500
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ScoreAdjusted"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "adjusted_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "delta"
++ },
++ "val": {
++ "i32": 1500
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 6500
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "update_score"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "award"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 6500
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_badge_upgrades_reflect_immediately_in_public_getters.1.json b/contracts/reputation/test_snapshots/test/test_badge_upgrades_reflect_immediately_in_public_getters.1.json
+new file mode 100644
+index 0000000..4729689
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_badge_upgrades_reflect_immediately_in_public_getters.1.json
+@@ -0,0 +1,2744 @@
++{
++ "generators": {
++ "address": 7,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "set_job_registry",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "submit_rating",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u64": 11
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "submit_rating",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "u64": 12
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "submit_rating",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "u64": 13
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 5541220902715666415
++ }
++ },
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 4837995959683129791
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_metadata"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 15
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "is_blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 11
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 11
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "bool": true
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 12
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 12
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "bool": true
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 13
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 13
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "bool": true
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "JobRegistry"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 11
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 11
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 12
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 12
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 13
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 13
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "set_job_registry"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job_registry"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 11
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 12
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 13
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u64": 11
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 11
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ReputationUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "caller"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 11
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "rating"
++ },
++ "val": {
++ "u32": 5
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "target"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_public_metrics"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "freelancer"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_public_metrics"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "u64": 12
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 12
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ReputationUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "caller"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 12
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "rating"
++ },
++ "val": {
++ "u32": 5
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "target"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_public_metrics"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "freelancer"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_public_metrics"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 1
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "u64": 13
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 13
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ReputationUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "caller"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 13
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "rating"
++ },
++ "val": {
++ "u32": 5
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "target"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 15
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_public_metrics"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "freelancer"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_public_metrics"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 15
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 3
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 2
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 10000
++ }
++ },
++ {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 15
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_blacklist_clears_badges_and_sets_flag.1.json b/contracts/reputation/test_snapshots/test/test_blacklist_clears_badges_and_sets_flag.1.json
+new file mode 100644
+index 0000000..5167989
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_blacklist_clears_badges_and_sets_flag.1.json
+@@ -0,0 +1,3117 @@
++{
++ "generators": {
++ "address": 8,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "set_job_registry",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "submit_rating",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u64": 21
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "submit_rating",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "u64": 22
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "function_name": "submit_rating",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "u64": 23
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 2032731177588607455
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_metadata"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 500
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 15
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 1000
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "is_blacklisted"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 21
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 21
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "bool": true
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 22
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 22
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "bool": true
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 23
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 23
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "bool": true
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "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": "AuthorizedUpdater"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobRegistry"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 21
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 21
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 22
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 22
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 23
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 23
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": null
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "set_job_registry"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job_registry"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 21
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 22
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 23
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u64": 21
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 21
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ReputationUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "caller"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 21
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "rating"
++ },
++ "val": {
++ "u32": 5
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "target"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "u64": 22
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 22
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ReputationUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "caller"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 22
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "rating"
++ },
++ "val": {
++ "u32": 5
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "target"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "u64": 23
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 23
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ReputationUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 2
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "caller"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 23
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "rating"
++ },
++ "val": {
++ "u32": 5
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "target"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 15
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
++ },
++ {
++ "symbol": "blacklist"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "blacklist_profile"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "BlacklistUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "client_score"
++ },
++ "val": {
++ "i32": 500
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer_score"
++ },
++ "val": {
++ "i32": 1000
++ }
++ },
++ {
++ "key": {
++ "symbol": "is_blacklisted"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "blacklist_profile"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "blacklist"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 1000
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 15
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "query_reputation"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "query_reputation"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Client"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 500
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": true
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 1000
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 3
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 15
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "is_blacklisted"
++ },
++ "val": {
++ "bool": true
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "is_blacklisted"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "is_blacklisted"
++ }
++ ],
++ "data": {
++ "bool": true
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_blacklist_requires_authorized_contract.1.json b/contracts/reputation/test_snapshots/test/test_blacklist_requires_authorized_contract.1.json
+new file mode 100644
+index 0000000..8a56d48
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_blacklist_requires_authorized_contract.1.json
+@@ -0,0 +1,689 @@
++{
++ "generators": {
++ "address": 5,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AuthorizedUpdater"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": null
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
++ },
++ {
++ "symbol": "blacklist"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "blacklist_profile"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "blacklist_profile"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "blacklist"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_direct_reviews_from_unverified_public_keys_are_rejected.1.json b/contracts/reputation/test_snapshots/test/test_direct_reviews_from_unverified_public_keys_are_rejected.1.json
+new file mode 100644
+index 0000000..9a0bbf1
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_direct_reviews_from_unverified_public_keys_are_rejected.1.json
+@@ -0,0 +1,777 @@
++{
++ "generators": {
++ "address": 6,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "function_name": "set_job_registry",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobRegistry"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 33
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 33
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "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": null
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
++ },
++ {
++ "symbol": "set_job_registry"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job_registry"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 33
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 33
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 33
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "submit_rating"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 33
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_direct_score_adjustment_requires_authorized_contract.1.json b/contracts/reputation/test_snapshots/test/test_direct_score_adjustment_requires_authorized_contract.1.json
+new file mode 100644
+index 0000000..02fe8b6
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_direct_score_adjustment_requires_authorized_contract.1.json
+@@ -0,0 +1,540 @@
++{
++ "generators": {
++ "address": 5,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AuthorizedUpdater"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "update_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "i32": 500
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "update_score"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "i32": 500
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_empty_profile_reads_are_safe.1.json b/contracts/reputation/test_snapshots/test/test_empty_profile_reads_are_safe.1.json
+new file mode 100644
+index 0000000..a580e61
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_empty_profile_reads_are_safe.1.json
+@@ -0,0 +1,507 @@
++{
++ "generators": {
++ "address": 2,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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": "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": null
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000002"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000002"
++ },
++ {
++ "symbol": "query_reputation"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "query_reputation"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Client"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "is_blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000002"
++ },
++ {
++ "symbol": "get_profile_metadata"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_profile_metadata"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_profile_metadata.1.json b/contracts/reputation/test_snapshots/test/test_profile_metadata.1.json
+index edd47fa..1b12c7a 100644
+--- a/contracts/reputation/test_snapshots/test/test_profile_metadata.1.json
++++ b/contracts/reputation/test_snapshots/test/test_profile_metadata.1.json
+@@ -118,50 +118,156 @@
+ },
+ {
+ "key": {
+- "symbol": "client_jobs"
++ "symbol": "badge_metadata"
+ },
+ "val": {
+- "u32": 0
++ "vec": []
+ }
+ },
+ {
+ "key": {
+- "symbol": "client_points"
++ "symbol": "client"
+ },
+ "val": {
+- "i32": 0
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ }
++ ]
+ }
+ },
+ {
+ "key": {
+- "symbol": "client_score"
++ "symbol": "freelancer"
+ },
+ "val": {
+- "i32": 5000
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ }
++ ]
+ }
+ },
+ {
+ "key": {
+- "symbol": "freelancer_jobs"
++ "symbol": "is_blacklisted"
+ },
+ "val": {
+- "u32": 0
+- }
+- },
+- {
+- "key": {
+- "symbol": "freelancer_points"
+- },
+- "val": {
+- "i32": 0
+- }
+- },
+- {
+- "key": {
+- "symbol": "freelancer_score"
+- },
+- "val": {
+- "i32": 5000
++ "bool": false
+ }
+ },
+ {
+diff --git a/contracts/reputation/test_snapshots/test/test_slash_requires_authorized_contract.1.json b/contracts/reputation/test_snapshots/test/test_slash_requires_authorized_contract.1.json
+new file mode 100644
+index 0000000..a39f3ba
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_slash_requires_authorized_contract.1.json
+@@ -0,0 +1,717 @@
++{
++ "generators": {
++ "address": 5,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AuthorizedUpdater"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": null
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
++ },
++ {
++ "symbol": "slash"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000003"
++ },
++ {
++ "symbol": "slash"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "slash"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "slash"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_slash_uses_fixed_point_decay.1.json b/contracts/reputation/test_snapshots/test/test_slash_uses_fixed_point_decay.1.json
+new file mode 100644
+index 0000000..d042f73
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_slash_uses_fixed_point_decay.1.json
+@@ -0,0 +1,1658 @@
++{
++ "generators": {
++ "address": 6,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "set_job_registry",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "function_name": "submit_rating",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ [],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 1033654523790656264
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Profile"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_metadata"
++ },
++ "val": {
++ "vec": []
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 8000
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "is_blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": "void"
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Reviewed"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "bool": true
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": [
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "Admin"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "AuthorizedUpdater"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ },
++ {
++ "key": {
++ "vec": [
++ {
++ "symbol": "JobRegistry"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": {
++ "vec": [
++ {
++ "symbol": "Job"
++ },
++ {
++ "u64": 1
++ }
++ ]
++ },
++ "durability": "persistent",
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": null
++ }
++ }
++ }
++ },
++ "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": null
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_code": {
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_code": {
++ "ext": "v0",
++ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
++ "code": ""
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "set_job_registry"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job_registry"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "u64": 1
++ },
++ {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_job"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "u64": 1
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "u32": 5
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "u64": 1
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000005",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_job"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "budget_stroops"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 10
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "client"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "freelancer"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "metadata_hash"
++ },
++ "val": {
++ "bytes": "516d4a6f62"
++ }
++ },
++ {
++ "key": {
++ "symbol": "status"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Completed"
++ }
++ ]
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ReputationUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "caller"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ }
++ },
++ {
++ "key": {
++ "symbol": "job_id"
++ },
++ "val": {
++ "u64": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "rating"
++ },
++ "val": {
++ "u32": 5
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "target"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "submit_rating"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
++ },
++ {
++ "symbol": "slash"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "slash"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "symbol": "fraud"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "ScoreAdjusted"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "adjusted_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "delta"
++ },
++ "val": {
++ "i32": -2000
++ }
++ },
++ {
++ "key": {
++ "symbol": "new_score"
++ },
++ "val": {
++ "i32": 8000
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "slash"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "slash"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "get_score"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "role"
++ },
++ "val": {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 8000
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/contracts/reputation/test_snapshots/test/test_submit_rating_updates_client_and_freelancer_paths.1.json b/contracts/reputation/test_snapshots/test/test_submit_rating_updates_client_and_freelancer_paths.1.json
+index 361f427..73d4985 100644
+--- a/contracts/reputation/test_snapshots/test/test_submit_rating_updates_client_and_freelancer_paths.1.json
++++ b/contracts/reputation/test_snapshots/test/test_submit_rating_updates_client_and_freelancer_paths.1.json
+@@ -244,50 +244,156 @@
+ },
+ {
+ "key": {
+- "symbol": "client_jobs"
++ "symbol": "badge_metadata"
+ },
+ "val": {
+- "u32": 0
++ "vec": []
+ }
+ },
+ {
+ "key": {
+- "symbol": "client_points"
+- },
+- "val": {
+- "i32": 0
+- }
+- },
+- {
+- "key": {
+- "symbol": "client_score"
+- },
+- "val": {
+- "i32": 5000
+- }
+- },
+- {
+- "key": {
+- "symbol": "freelancer_jobs"
++ "symbol": "client"
+ },
+ "val": {
+- "u32": 1
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ }
++ ]
+ }
+ },
+ {
+ "key": {
+- "symbol": "freelancer_points"
++ "symbol": "freelancer"
+ },
+ "val": {
+- "i32": 4
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 8000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 4
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 8000
++ }
++ }
++ ]
+ }
+ },
+ {
+ "key": {
+- "symbol": "freelancer_score"
++ "symbol": "is_blacklisted"
+ },
+ "val": {
+- "i32": 8000
++ "bool": false
+ }
+ },
+ {
+@@ -352,50 +458,156 @@
+ },
+ {
+ "key": {
+- "symbol": "client_jobs"
+- },
+- "val": {
+- "u32": 0
+- }
+- },
+- {
+- "key": {
+- "symbol": "client_points"
+- },
+- "val": {
+- "i32": 0
+- }
+- },
+- {
+- "key": {
+- "symbol": "client_score"
++ "symbol": "badge_metadata"
+ },
+ "val": {
+- "i32": 5000
++ "vec": []
+ }
+ },
+ {
+ "key": {
+- "symbol": "freelancer_jobs"
++ "symbol": "client"
+ },
+ "val": {
+- "u32": 1
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 5000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 0
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 0
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 5000
++ }
++ }
++ ]
+ }
+ },
+ {
+ "key": {
+- "symbol": "freelancer_points"
++ "symbol": "freelancer"
+ },
+ "val": {
+- "i32": 5
++ "map": [
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "completed_jobs"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "review"
++ },
++ "val": {
++ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "reviews"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "total_points"
++ },
++ "val": {
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
++ }
++ }
++ ]
++ }
++ },
++ {
++ "key": {
++ "symbol": "score"
++ },
++ "val": {
++ "i32": 10000
++ }
++ }
++ ]
+ }
+ },
+ {
+ "key": {
+- "symbol": "freelancer_score"
++ "symbol": "is_blacklisted"
+ },
+ "val": {
+- "i32": 10000
++ "bool": false
+ }
+ },
+ {
+@@ -734,7 +946,7 @@
+ "symbol": "metadata_hash"
+ },
+ "val": {
+- "bytes": "516d4a6f6232"
++ "bytes": "516d4a6f62"
+ }
+ },
+ {
+@@ -1074,7 +1286,7 @@
+ "symbol": "metadata_hash"
+ },
+ "val": {
+- "bytes": "516d4a6f6232"
++ "bytes": "516d4a6f62"
+ }
+ },
+ {
+@@ -1272,6 +1484,30 @@
+ ],
+ "data": {
+ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
+ {
+ "key": {
+ "symbol": "caller"
+@@ -1345,7 +1581,10 @@
+ "symbol": "total_points"
+ },
+ "val": {
+- "i32": 5
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
+ }
+ },
+ {
+@@ -1446,6 +1685,30 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 10000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
+ {
+ "key": {
+ "symbol": "reviews"
+@@ -1487,7 +1750,10 @@
+ "symbol": "total_points"
+ },
+ "val": {
+- "i32": 5
++ "i128": {
++ "hi": 0,
++ "lo": 5
++ }
+ }
+ }
+ ]
+@@ -1611,7 +1877,7 @@
+ "symbol": "metadata_hash"
+ },
+ "val": {
+- "bytes": "516d4a6f6232"
++ "bytes": "516d4a6f62"
+ }
+ },
+ {
+@@ -1650,6 +1916,30 @@
+ ],
+ "data": {
+ "map": [
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 8000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
+ {
+ "key": {
+ "symbol": "caller"
+@@ -1723,7 +2013,10 @@
+ "symbol": "total_points"
+ },
+ "val": {
+- "i32": 4
++ "i128": {
++ "hi": 0,
++ "lo": 4
++ }
+ }
+ },
+ {
+@@ -1824,6 +2117,30 @@
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
++ {
++ "key": {
++ "symbol": "average_rating_bps"
++ },
++ "val": {
++ "i32": 8000
++ }
++ },
++ {
++ "key": {
++ "symbol": "badge_level"
++ },
++ "val": {
++ "u32": 1
++ }
++ },
++ {
++ "key": {
++ "symbol": "blacklisted"
++ },
++ "val": {
++ "bool": false
++ }
++ },
+ {
+ "key": {
+ "symbol": "reviews"
+@@ -1865,7 +2182,10 @@
+ "symbol": "total_points"
+ },
+ "val": {
+- "i32": 4
++ "i128": {
++ "hi": 0,
++ "lo": 4
++ }
+ }
+ }
+ ]
+diff --git a/contracts/reputation/test_snapshots/test/test_unauthorized_contract_update_score_is_rejected.1.json b/contracts/reputation/test_snapshots/test/test_unauthorized_contract_update_score_is_rejected.1.json
+new file mode 100644
+index 0000000..a06def1
+--- /dev/null
++++ b/contracts/reputation/test_snapshots/test/test_unauthorized_contract_update_score_is_rejected.1.json
+@@ -0,0 +1,717 @@
++{
++ "generators": {
++ "address": 5,
++ "nonce": 0
++ },
++ "auth": [
++ [],
++ [
++ [
++ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ {
++ "function": {
++ "contract_fn": {
++ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
++ "function_name": "set_authorized_contract",
++ "args": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ },
++ "sub_invocations": []
++ }
++ ]
++ ],
++ []
++ ],
++ "ledger": {
++ "protocol_version": 21,
++ "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_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
++ "key": {
++ "ledger_key_nonce": {
++ "nonce": 801925984706572462
++ }
++ },
++ "durability": "temporary",
++ "val": "void"
++ }
++ },
++ "ext": "v0"
++ },
++ 6311999
++ ]
++ ],
++ [
++ {
++ "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": "AuthorizedUpdater"
++ }
++ ]
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 150000
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent",
++ "val": {
++ "contract_instance": {
++ "executable": {
++ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
++ },
++ "storage": null
++ }
++ }
++ }
++ },
++ "ext": "v0"
++ },
++ 4095
++ ]
++ ],
++ [
++ {
++ "contract_data": {
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "key": "ledger_key_contract_instance",
++ "durability": "persistent"
++ }
++ },
++ [
++ {
++ "last_modified_ledger_seq": 0,
++ "data": {
++ "contract_data": {
++ "ext": "v0",
++ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
++ "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"
++ },
++ 150000
++ ]
++ ]
++ ]
++ },
++ "events": [
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000002"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "initialize"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000002"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "contract",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "string": "reputation"
++ },
++ {
++ "string": "AuthorizedContractUpdated"
++ }
++ ],
++ "data": {
++ "map": [
++ {
++ "key": {
++ "symbol": "by_admin"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
++ }
++ },
++ {
++ "key": {
++ "symbol": "contract_address"
++ },
++ "val": {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
++ }
++ },
++ {
++ "key": {
++ "symbol": "updated_at"
++ },
++ "val": {
++ "u64": 0
++ }
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_return"
++ },
++ {
++ "symbol": "set_authorized_contract"
++ }
++ ],
++ "data": "void"
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
++ },
++ {
++ "symbol": "award"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "i32": 500
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "fn_call"
++ },
++ {
++ "bytes": "0000000000000000000000000000000000000000000000000000000000000002"
++ },
++ {
++ "symbol": "update_score"
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "i32": 500
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "failing with contract error"
++ },
++ {
++ "u32": 2
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000002",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "update_score"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "i32": 500
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "caught error from function"
++ }
++ }
++ }
++ },
++ "failed_call": true
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "vec": [
++ {
++ "string": "contract call failed"
++ },
++ {
++ "symbol": "award"
++ },
++ {
++ "vec": [
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
++ },
++ {
++ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
++ },
++ {
++ "vec": [
++ {
++ "symbol": "Freelancer"
++ }
++ ]
++ },
++ {
++ "i32": 500
++ }
++ ]
++ }
++ ]
++ }
++ }
++ }
++ },
++ "failed_call": false
++ },
++ {
++ "event": {
++ "ext": "v0",
++ "contract_id": null,
++ "type_": "diagnostic",
++ "body": {
++ "v0": {
++ "topics": [
++ {
++ "symbol": "error"
++ },
++ {
++ "error": {
++ "contract": 2
++ }
++ }
++ ],
++ "data": {
++ "string": "escalating error to panic"
++ }
++ }
++ }
++ },
++ "failed_call": false
++ }
++ ]
++}
+\ No newline at end of file
+diff --git a/docs/contracts/job_registry.md b/docs/contracts/job_registry.md
+index 72d3c40..c969ec0 100644
+--- a/docs/contracts/job_registry.md
++++ b/docs/contracts/job_registry.md
+@@ -2,7 +2,7 @@
+
+ ## Overview
+
+-The `JobRegistry` contract manages job postings, bid submissions, bid acceptance, deliverable submission, and dispute status updates for the Lance protocol.
++The `JobRegistry` contract manages job postings, bid submissions, bid cancellation, collateral refund accounting, bid acceptance, deliverable submission, and dispute status updates for the Lance protocol.
+
+ ## `post_job` and `post_job_auto`
+
+@@ -13,8 +13,9 @@ These functions allow a client to post a new job to the Lance protocol, making i
+ ### Behavior
+
+ - Authenticates the caller with `client.require_auth()`.
+-- Validates inputs: checks for invalid (zero) budget, validates the deliverable IPFS hash size, and checks for zero job ID.
+-- Stores the job data (`client`, `metadata_hash`, `budget_stroops`, `status = Open`) in persistent storage.
++- Validates inputs: checks for invalid (zero) budget, validates the compact IPFS CID size, and checks for zero job ID.
++- Stores the job data (`client`, compact IPFS CID metadata, `budget_stroops`, `status = Open`) in persistent storage.
++- Initializes a compact per-job bid counter; individual bids are stored in indexed rows only when submitted.
+ - Automatically increments the internal `NextJobId` counter.
+ - Emits a `jobpost` (or `jobauto`) event for on-chain tracking and off-chain indexing.
+
+@@ -24,19 +25,19 @@ These functions use `JobRegistryError` to return structured error information:
+
+ - `InvalidJobId` (3): job ID cannot be zero.
+ - `InvalidBudget` (4): budget must be greater than zero.
+-- `InvalidHash` (5): metadata hash must not be empty or exceed maximum length.
++- `InvalidHash` (5): metadata CID must not be empty or exceed maximum length.
+ - `JobAlreadyExists` (6): the explicitly requested job ID is already taken.
+ - `Overflow` (14): the next job ID counter overflowed.
+
+ ### Security
+
+-These functions perform strict validation on inputs to prevent issues like overflow and garbage data (e.g. invalid IPFS hashes). All inputs are bounded, ensuring minimal on-chain footprint and deterministic behavior.
++These functions perform strict validation on inputs to prevent issues like overflow and oversized metadata. All CID inputs are bounded, ensuring minimal on-chain footprint and deterministic behavior.
+
+ ## `accept_bid`
+
+ ### Purpose
+
+-`accept_bid` is called by a job client to accept one freelancer's bid and move the job into an in-progress state.
++`accept_bid` is called by a job client to accept one freelancer's bid and move the job into the assigned state.
+
+ ### Behavior
+
+@@ -44,19 +45,68 @@ These functions perform strict validation on inputs to prevent issues like overf
+ - Verifies the job exists and is currently in the `Open` state.
+ - Confirms the caller is the job's client.
+ - Validates that the selected freelancer previously submitted a bid for the job.
+-- Updates the job status to `InProgress` and records the accepted freelancer.
++- Credits collateral from non-selected bids to each losing freelancer's refund balance.
++- Compacts bid storage down to the accepted bid.
++- Updates the job status to `Assigned` and records the accepted freelancer.
+ - Emits a `BidAccepted` event for on-chain auditing.
+
+ ### Errors
+
+ `accept_bid` uses `JobRegistryError` to return structured error information:
+
+-- `JobNotFound` (1): job does not exist.
+-- `InvalidState` (5): job is not open for bid acceptance.
+-- `Unauthorized` (3): caller is not the job's client.
+-- `BidNotFound` (6): selected freelancer did not submit a bid.
++- `JobNotFound` (7): job does not exist.
++- `JobNotOpen` (8): job is not open for bid acceptance.
++- `Unauthorized` (9): caller is not the job's client.
++- `BidNotFound` (11): selected freelancer did not submit a bid.
+
+ This implementation strengthens trustlessness by ensuring bid acceptance can only succeed for bidders who actually participated in the auction.
++The bid lookup is keyed by `(job_id, freelancer)`, so acceptance does not deserialize the full bid collection.
++
++## `submit_bid` and `submit_bid_with_collateral`
++
++### Purpose
++
++These functions let freelancers submit compact CID-backed proposals. `submit_bid` keeps the legacy zero-collateral path, while `submit_bid_with_collateral` records a non-negative collateral amount for later refund if the bidder cancels before assignment.
++
++### Behavior
++
++- Authenticates the caller with `freelancer.require_auth()`.
++- Verifies the job exists and is still `Open`.
++- Validates that the proposal CID is non-empty and within the CID size bound.
++- Rejects duplicate bids through `BidIndex(job_id, freelancer)`.
++- Stores the bid in `Bid(job_id, index)` and increments `BidCount(job_id)` with checked math.
++- Records collateral in the bid row without storing heavy proposal text on-chain.
++
++### Errors
++
++- `JobNotFound` (7): job does not exist.
++- `JobNotOpen` (8): job is not open for bid submission.
++- `BidAlreadySubmitted` (10): freelancer already has an active bid for this job.
++- `InvalidCollateral` (16): collateral is negative.
++
++## `cancel_bid`, `claim_refund`, and `get_refund_balance`
++
++### Purpose
++
++`cancel_bid` lets a freelancer withdraw an open bid and credit its collateral to a refundable balance. `claim_refund` clears and returns the accumulated balance, while `get_refund_balance` exposes the current amount for wallets and indexers.
++
++### Behavior
++
++- Only the bidding freelancer can cancel or claim their own refund.
++- Cancellation is allowed only while the job is `Open`.
++- The bid row is removed with a swap-remove operation so `BidCount(job_id)` remains a tight upper bound.
++- If the removed bid is not the last row, the last bid is moved into the cancelled index and its `BidIndex` is updated.
++- Collateral is added to `Refund(freelancer)` with checked math.
++- Losing bid collateral is also credited during `accept_bid`.
++- `claim_refund` removes the refund storage entry after returning the amount.
++
++### Errors
++
++- `JobNotFound` (7): job does not exist.
++- `JobNotOpen` (8): bid cancellation is no longer allowed.
++- `BidNotFound` (11): the freelancer has no active bid for the job.
++- `Overflow` (14): refund balance addition overflowed.
++- `NoRefund` (17): the freelancer has no refundable balance to claim.
+
+ ## `get_job`
+
+@@ -71,7 +121,7 @@ This implementation strengthens trustlessness by ensuring bid acceptance can onl
+
+ ### Errors
+
+-- `JobNotFound` (1): The specified job ID does not exist.
++- `JobNotFound` (7): The specified job ID does not exist.
+
+ ## `get_bids`
+
+@@ -82,37 +132,55 @@ This implementation strengthens trustlessness by ensuring bid acceptance can onl
+ ### Behavior
+
+ - Verifies the job exists.
+-- Retrieves the list of `BidRecord`s associated with the job.
++- Reconstructs the list of `BidRecord`s from indexed bid rows associated with the job.
+ - Returns an empty list if the job exists but has no bids.
+
+ ### Errors
+
+-- `JobNotFound` (1): The specified job ID does not exist.
++- `JobNotFound` (7): The specified job ID does not exist.
++
++## `get_bid_at`
++
++### Purpose
++
++`get_bid_at` retrieves one indexed bid row for callers that need paged or bounded access.
++
++### Behavior
++
++- Verifies the job exists.
++- Checks `index < BidCount(job_id)`.
++- Returns only the requested bid record.
++
++### Errors
++
++- `JobNotFound` (7): The specified job ID does not exist.
++- `BidIndexOutOfBounds` (15): The requested bid index is outside the stored bounds.
++
+ ## `submit_deliverable`
+
+ ### Purpose
+
+-`submit_deliverable` is called by a freelancer to submit their completed work for a job that is in progress. The deliverable is stored as an IPFS hash, enabling decentralized content storage while maintaining on-chain auditability.
++`submit_deliverable` is called by a freelancer to submit their completed work for an assigned job. The deliverable is stored as a compact IPFS CID, enabling decentralized content storage while maintaining on-chain auditability.
+
+ ### Behavior
+
+ - Authenticates the caller with `freelancer.require_auth()`.
+-- Validates that the deliverable hash is not empty to prevent invalid submissions.
+-- Verifies the job exists and is currently in the `InProgress` state.
++- Validates that the deliverable CID is not empty or oversized to prevent invalid submissions.
++- Verifies the job exists and is currently in the `Assigned` state.
+ - Confirms the caller is the assigned freelancer for the job.
+ - Updates the job status to `DeliverableSubmitted`.
+-- Stores the deliverable hash in persistent storage for later retrieval.
++- Stores the deliverable CID in persistent storage for later retrieval.
+ - Emits a `DeliverableSubmitted` event with timestamp for on-chain auditing and off-chain indexing.
+
+ ### Errors
+
+ `submit_deliverable` uses `JobRegistryError` to return structured error information:
+
+-- `JobNotFound` (1): job does not exist.
+-- `InvalidInput` (4): deliverable hash is empty.
+-- `InvalidState` (5): job is not in `InProgress` status.
+-- `Unauthorized` (3): caller is not the assigned freelancer for the job.
++- `JobNotFound` (7): job does not exist.
++- `InvalidHash` (5): deliverable CID is empty or exceeds the CID size bound.
++- `InvalidStateTransition` (12): job is not in `Assigned` status.
++- `Unauthorized` (9): caller is not the assigned freelancer for the job.
+
+ ### Notes
+
+-This function is critical for the job completion workflow, enabling freelancers to submit their work while maintaining security through authentication and state validation. The IPFS hash storage minimizes on-chain data while preserving immutability and accessibility.
++This function is critical for the job completion workflow, enabling freelancers to submit their work while maintaining security through authentication and state validation. Compact IPFS CID storage minimizes on-chain data while preserving immutability and accessibility.
+diff --git a/docs/contracts/storage_layout_optimization.md b/docs/contracts/storage_layout_optimization.md
+index ed72d76..ad7fba0 100644
+--- a/docs/contracts/storage_layout_optimization.md
++++ b/docs/contracts/storage_layout_optimization.md
+@@ -8,7 +8,7 @@ The objective is to lower rent footprint and execution overhead without changing
+
+ ## What Changed
+
+-### 1) JobRegistry: lazy `Bids(job_id)` ContractData allocation
++### 1) JobRegistry: indexed bid rows instead of monolithic bid vectors
+
+ File: `contracts/job_registry/src/lib.rs`
+
+@@ -17,17 +17,28 @@ Before:
+ - `post_job` always created two persistent entries:
+ - `Job(job_id)`
+ - `Bids(job_id)` initialized as an empty vector
++- Each `submit_bid` deserialized and rewrote the whole vector.
++- `accept_bid` scanned the whole vector to confirm that a freelancer had bid.
+
+ After:
+
+ - `post_job` creates only `Job(job_id)`.
+-- `Bids(job_id)` is created on first `submit_bid` write.
+-- Read paths (`get_bids`, `accept_bid`) already safely handle missing bids entry via `unwrap_or_else(Vec::new)`.
++- `BidCount(job_id)` tracks the current bid bounds.
++- `Bid(job_id, index)` stores each proposal as an independent row.
++- `BidIndex(job_id, freelancer)` provides constant-key duplicate checks, cancellation, and accept validation.
++- `Refund(freelancer)` accumulates collateral credited by cancelled bids until the freelancer claims it.
++- `get_bids` remains a compatibility view that reconstructs a vector only for read callers.
++- `get_bid_at` provides bounded indexed reads and returns `BidIndexOutOfBounds` (15) for invalid indices.
+
+ Impact:
+
+ - One less persistent `ContractData` entry per newly posted job that never receives bids.
+-- Lower storage rent pressure and smaller ledger footprint.
++- Write paths avoid repeatedly deserializing and rewriting a growing bid vector.
++- Bid cancellation uses swap-remove compaction so indexed bounds remain tight after dynamic removals.
++- Bid acceptance refunds non-selected collateral and compacts storage down to the accepted row.
++- Collateral refund accounting uses checked addition and clears storage on claim.
++- Late bid submissions after assignment remain blocked with `JobNotOpen` (8).
++- Lower execution overhead for duplicate checks and bid acceptance.
+
+ ### 2) Reputation: strict admin verification for instance config updates
+
+@@ -47,9 +58,10 @@ Impact:
+
+ - `ContractInstance`: used for compact, singleton contract config (admin, registry pointers).
+ - `ContractData`: used for per-job/per-user dynamic state.
+-- Dynamic keys are now allocated lazily where possible (`Bids(job_id)`), minimizing persistent data creation.
++- Dynamic bid keys are now allocated per submitted proposal, bounded by `BidCount(job_id)`, and compacted on cancellation, minimizing unnecessary persistent data reads and rewrites.
+
+ ## Compatibility
+
+ - No public function signatures were changed.
+-- Existing tests and behavior remain compatible.
++- `submit_bid` remains available as the zero-collateral compatibility path.
++- `BidRecord` now includes `collateral_stroops` so callers can inspect refundable bid collateral.
+diff --git a/package-lock.json b/package-lock.json
+index f60900e..452893e 100644
+--- a/package-lock.json
++++ b/package-lock.json
+@@ -14,7 +14,8 @@
+ },
+ "devDependencies": {
+ "@playwright/test": "^1.43.0",
+- "@types/node": "^20.0.0"
++ "@types/node": "^20.0.0",
++ "vitest": "^4.1.7"
+ },
+ "optionalDependencies": {
+ "@next/swc-linux-x64-gnu": "16.1.6",
+@@ -55,8 +56,10 @@
+ },
+ "devDependencies": {
+ "@tailwindcss/postcss": "^4",
++ "@testing-library/dom": "^10.4.1",
+ "@testing-library/jest-dom": "^6.6.3",
+ "@testing-library/react": "^16.3.0",
++ "@testing-library/user-event": "^14.6.1",
+ "@types/node": "^20.19.39",
+ "@types/react": "^19",
+ "@types/react-dom": "^19",
+@@ -241,23 +244,6 @@
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+- "apps/web/node_modules/chai": {
+- "version": "6.2.2",
+- "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
+- "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
+- "dev": true,
+- "license": "MIT",
+- "engines": {
+- "node": ">=18"
+- }
+- },
+- "apps/web/node_modules/es-module-lexer": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
+- "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==",
+- "dev": true,
+- "license": "MIT"
+- },
+ "apps/web/node_modules/magicast": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz",
+@@ -270,13 +256,6 @@
+ "source-map-js": "^1.2.1"
+ }
+ },
+- "apps/web/node_modules/pathe": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+- "dev": true,
+- "license": "MIT"
+- },
+ "apps/web/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+@@ -319,50 +298,6 @@
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+- "apps/web/node_modules/std-env": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz",
+- "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==",
+- "dev": true,
+- "license": "MIT"
+- },
+- "apps/web/node_modules/tinyexec": {
+- "version": "1.1.2",
+- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.2.tgz",
+- "integrity": "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==",
+- "dev": true,
+- "license": "MIT",
+- "engines": {
+- "node": ">=18"
+- }
+- },
+- "apps/web/node_modules/tinyglobby": {
+- "version": "0.2.16",
+- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
+- "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
+- "dev": true,
+- "license": "MIT",
+- "dependencies": {
+- "fdir": "^6.5.0",
+- "picomatch": "^4.0.4"
+- },
+- "engines": {
+- "node": ">=12.0.0"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/SuperchupuDev"
+- }
+- },
+- "apps/web/node_modules/tinyrainbow": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
+- "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
+- "dev": true,
+- "license": "MIT",
+- "engines": {
+- "node": ">=14.0.0"
+- }
+- },
+ "apps/web/node_modules/vite": {
+ "version": "8.0.10",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz",
+@@ -4467,6 +4402,43 @@
+ "react": "^18 || ^19"
+ }
+ },
++ "node_modules/@testing-library/dom": {
++ "version": "10.4.1",
++ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
++ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "@babel/code-frame": "^7.10.4",
++ "@babel/runtime": "^7.12.5",
++ "@types/aria-query": "^5.0.1",
++ "aria-query": "5.3.0",
++ "dom-accessibility-api": "^0.5.9",
++ "lz-string": "^1.5.0",
++ "picocolors": "1.1.1",
++ "pretty-format": "^27.0.2"
++ },
++ "engines": {
++ "node": ">=18"
++ }
++ },
++ "node_modules/@testing-library/dom/node_modules/aria-query": {
++ "version": "5.3.0",
++ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
++ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
++ "dev": true,
++ "license": "Apache-2.0",
++ "dependencies": {
++ "dequal": "^2.0.3"
++ }
++ },
++ "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": {
++ "version": "0.5.16",
++ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
++ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
++ "dev": true,
++ "license": "MIT"
++ },
+ "node_modules/@testing-library/jest-dom": {
+ "version": "6.9.1",
+ "dev": true,
+@@ -4511,6 +4483,20 @@
+ }
+ }
+ },
++ "node_modules/@testing-library/user-event": {
++ "version": "14.6.1",
++ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz",
++ "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==",
++ "dev": true,
++ "license": "MIT",
++ "engines": {
++ "node": ">=12",
++ "npm": ">=6"
++ },
++ "peerDependencies": {
++ "@testing-library/dom": ">=7.21.4"
++ }
++ },
+ "node_modules/@trezor/analytics": {
+ "version": "1.4.3",
+ "license": "See LICENSE.md in repo root",
+@@ -5094,6 +5080,13 @@
+ "license": "0BSD",
+ "optional": true
+ },
++ "node_modules/@types/aria-query": {
++ "version": "5.0.4",
++ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
++ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
++ "dev": true,
++ "license": "MIT"
++ },
+ "node_modules/@types/chai": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
+@@ -5513,6 +5506,119 @@
+ "linux"
+ ]
+ },
++ "node_modules/@vitest/expect": {
++ "version": "4.1.7",
++ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.7.tgz",
++ "integrity": "sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "@standard-schema/spec": "^1.1.0",
++ "@types/chai": "^5.2.2",
++ "@vitest/spy": "4.1.7",
++ "@vitest/utils": "4.1.7",
++ "chai": "^6.2.2",
++ "tinyrainbow": "^3.1.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/vitest"
++ }
++ },
++ "node_modules/@vitest/mocker": {
++ "version": "4.1.7",
++ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.7.tgz",
++ "integrity": "sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "@vitest/spy": "4.1.7",
++ "estree-walker": "^3.0.3",
++ "magic-string": "^0.30.21"
++ },
++ "funding": {
++ "url": "https://opencollective.com/vitest"
++ },
++ "peerDependencies": {
++ "msw": "^2.4.9",
++ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
++ },
++ "peerDependenciesMeta": {
++ "msw": {
++ "optional": true
++ },
++ "vite": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/@vitest/pretty-format": {
++ "version": "4.1.7",
++ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.7.tgz",
++ "integrity": "sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "tinyrainbow": "^3.1.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/vitest"
++ }
++ },
++ "node_modules/@vitest/runner": {
++ "version": "4.1.7",
++ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.7.tgz",
++ "integrity": "sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "@vitest/utils": "4.1.7",
++ "pathe": "^2.0.3"
++ },
++ "funding": {
++ "url": "https://opencollective.com/vitest"
++ }
++ },
++ "node_modules/@vitest/snapshot": {
++ "version": "4.1.7",
++ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.7.tgz",
++ "integrity": "sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "@vitest/pretty-format": "4.1.7",
++ "@vitest/utils": "4.1.7",
++ "magic-string": "^0.30.21",
++ "pathe": "^2.0.3"
++ },
++ "funding": {
++ "url": "https://opencollective.com/vitest"
++ }
++ },
++ "node_modules/@vitest/spy": {
++ "version": "4.1.7",
++ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.7.tgz",
++ "integrity": "sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==",
++ "dev": true,
++ "license": "MIT",
++ "funding": {
++ "url": "https://opencollective.com/vitest"
++ }
++ },
++ "node_modules/@vitest/utils": {
++ "version": "4.1.7",
++ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.7.tgz",
++ "integrity": "sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "@vitest/pretty-format": "4.1.7",
++ "convert-source-map": "^2.0.0",
++ "tinyrainbow": "^3.1.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/vitest"
++ }
++ },
+ "node_modules/@wallet-standard/base": {
+ "version": "1.1.0",
+ "license": "Apache-2.0",
+@@ -6843,6 +6949,16 @@
+ "node": ">=20"
+ }
+ },
++ "node_modules/chai": {
++ "version": "6.2.2",
++ "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
++ "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
++ "dev": true,
++ "license": "MIT",
++ "engines": {
++ "node": ">=18"
++ }
++ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "license": "MIT",
+@@ -7402,6 +7518,16 @@
+ "node": ">= 0.8"
+ }
+ },
++ "node_modules/dequal": {
++ "version": "2.0.3",
++ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
++ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
++ "dev": true,
++ "license": "MIT",
++ "engines": {
++ "node": ">=6"
++ }
++ },
+ "node_modules/des.js": {
+ "version": "1.1.0",
+ "license": "MIT",
+@@ -7662,6 +7788,13 @@
+ "node": ">= 0.4"
+ }
+ },
++ "node_modules/es-module-lexer": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
++ "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==",
++ "dev": true,
++ "license": "MIT"
++ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "license": "MIT",
+@@ -9687,15 +9820,18 @@
+ "lightningcss-win32-x64-msvc": "1.32.0"
+ }
+ },
+- "node_modules/lightningcss-linux-x64-gnu": {
++ "node_modules/lightningcss-android-arm64": {
+ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
++ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
+ "cpu": [
+- "x64"
++ "arm64"
+ ],
++ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+- "linux"
++ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+@@ -9705,15 +9841,18 @@
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+- "node_modules/lightningcss-linux-x64-musl": {
++ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
++ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
+ "cpu": [
+- "x64"
++ "arm64"
+ ],
++ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+- "linux"
++ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+@@ -9723,50 +9862,239 @@
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+- "node_modules/lit": {
+- "version": "3.3.0",
+- "license": "BSD-3-Clause",
+- "dependencies": {
+- "@lit/reactive-element": "^2.1.0",
+- "lit-element": "^4.2.0",
+- "lit-html": "^3.3.0"
+- }
+- },
+- "node_modules/lit-element": {
+- "version": "4.2.2",
+- "license": "BSD-3-Clause",
+- "dependencies": {
+- "@lit-labs/ssr-dom-shim": "^1.5.0",
+- "@lit/reactive-element": "^2.1.0",
+- "lit-html": "^3.3.0"
+- }
+- },
+- "node_modules/lit-html": {
+- "version": "3.3.2",
+- "license": "BSD-3-Clause",
+- "dependencies": {
+- "@types/trusted-types": "^2.0.2"
+- }
+- },
+- "node_modules/locate-path": {
+- "version": "6.0.0",
++ "node_modules/lightningcss-darwin-x64": {
++ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
++ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
++ "cpu": [
++ "x64"
++ ],
+ "dev": true,
+- "license": "MIT",
+- "dependencies": {
+- "p-locate": "^5.0.0"
+- },
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "darwin"
++ ],
+ "engines": {
+- "node": ">=10"
++ "node": ">= 12.0.0"
+ },
+ "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
+ }
+ },
+- "node_modules/lodash.merge": {
+- "version": "4.6.2",
+- "dev": true,
+- "license": "MIT"
+- },
++ "node_modules/lightningcss-freebsd-x64": {
++ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
++ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
++ "cpu": [
++ "x64"
++ ],
++ "dev": true,
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "freebsd"
++ ],
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
++ }
++ },
++ "node_modules/lightningcss-linux-arm-gnueabihf": {
++ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
++ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
++ "cpu": [
++ "arm"
++ ],
++ "dev": true,
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
++ }
++ },
++ "node_modules/lightningcss-linux-arm64-gnu": {
++ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
++ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "libc": [
++ "glibc"
++ ],
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
++ }
++ },
++ "node_modules/lightningcss-linux-arm64-musl": {
++ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
++ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "libc": [
++ "musl"
++ ],
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
++ }
++ },
++ "node_modules/lightningcss-linux-x64-gnu": {
++ "version": "1.32.0",
++ "cpu": [
++ "x64"
++ ],
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
++ }
++ },
++ "node_modules/lightningcss-linux-x64-musl": {
++ "version": "1.32.0",
++ "cpu": [
++ "x64"
++ ],
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
++ }
++ },
++ "node_modules/lightningcss-win32-arm64-msvc": {
++ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
++ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "win32"
++ ],
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
++ }
++ },
++ "node_modules/lightningcss-win32-x64-msvc": {
++ "version": "1.32.0",
++ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
++ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
++ "cpu": [
++ "x64"
++ ],
++ "dev": true,
++ "license": "MPL-2.0",
++ "optional": true,
++ "os": [
++ "win32"
++ ],
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/parcel"
++ }
++ },
++ "node_modules/lit": {
++ "version": "3.3.0",
++ "license": "BSD-3-Clause",
++ "dependencies": {
++ "@lit/reactive-element": "^2.1.0",
++ "lit-element": "^4.2.0",
++ "lit-html": "^3.3.0"
++ }
++ },
++ "node_modules/lit-element": {
++ "version": "4.2.2",
++ "license": "BSD-3-Clause",
++ "dependencies": {
++ "@lit-labs/ssr-dom-shim": "^1.5.0",
++ "@lit/reactive-element": "^2.1.0",
++ "lit-html": "^3.3.0"
++ }
++ },
++ "node_modules/lit-html": {
++ "version": "3.3.2",
++ "license": "BSD-3-Clause",
++ "dependencies": {
++ "@types/trusted-types": "^2.0.2"
++ }
++ },
++ "node_modules/locate-path": {
++ "version": "6.0.0",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "p-locate": "^5.0.0"
++ },
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/lodash.merge": {
++ "version": "4.6.2",
++ "dev": true,
++ "license": "MIT"
++ },
+ "node_modules/long": {
+ "version": "5.2.5",
+ "license": "Apache-2.0"
+@@ -9797,6 +10125,16 @@
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
++ "node_modules/lz-string": {
++ "version": "1.5.0",
++ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
++ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
++ "dev": true,
++ "license": "MIT",
++ "bin": {
++ "lz-string": "bin/bin.js"
++ }
++ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "dev": true,
+@@ -9945,7 +10283,9 @@
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+- "version": "3.3.11",
++ "version": "3.3.12",
++ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
++ "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
+ "funding": [
+ {
+ "type": "github",
+@@ -10464,6 +10804,13 @@
+ "dev": true,
+ "license": "MIT"
+ },
++ "node_modules/pathe": {
++ "version": "2.0.3",
++ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
++ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
++ "dev": true,
++ "license": "MIT"
++ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.5",
+ "license": "MIT",
+@@ -10582,7 +10929,9 @@
+ }
+ },
+ "node_modules/postcss": {
+- "version": "8.5.8",
++ "version": "8.5.15",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
++ "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
+ "dev": true,
+ "funding": [
+ {
+@@ -10600,7 +10949,7 @@
+ ],
+ "license": "MIT",
+ "dependencies": {
+- "nanoid": "^3.3.11",
++ "nanoid": "^3.3.12",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+@@ -10624,6 +10973,41 @@
+ "node": ">= 0.8.0"
+ }
+ },
++ "node_modules/pretty-format": {
++ "version": "27.5.1",
++ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
++ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "ansi-regex": "^5.0.1",
++ "ansi-styles": "^5.0.0",
++ "react-is": "^17.0.1"
++ },
++ "engines": {
++ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
++ }
++ },
++ "node_modules/pretty-format/node_modules/ansi-styles": {
++ "version": "5.2.0",
++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
++ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
++ "dev": true,
++ "license": "MIT",
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
++ }
++ },
++ "node_modules/pretty-format/node_modules/react-is": {
++ "version": "17.0.2",
++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
++ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
++ "dev": true,
++ "license": "MIT"
++ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "license": "MIT"
+@@ -11664,6 +12048,13 @@
+ "dev": true,
+ "license": "MIT"
+ },
++ "node_modules/std-env": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz",
++ "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==",
++ "dev": true,
++ "license": "MIT"
++ },
+ "node_modules/stop-iteration-iterator": {
+ "version": "1.1.0",
+ "dev": true,
+@@ -11983,13 +12374,25 @@
+ "dev": true,
+ "license": "MIT"
+ },
++ "node_modules/tinyexec": {
++ "version": "1.2.2",
++ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.2.tgz",
++ "integrity": "sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==",
++ "dev": true,
++ "license": "MIT",
++ "engines": {
++ "node": ">=18"
++ }
++ },
+ "node_modules/tinyglobby": {
+- "version": "0.2.15",
++ "version": "0.2.16",
++ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
++ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+- "picomatch": "^4.0.3"
++ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+@@ -12009,6 +12412,16 @@
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
++ "node_modules/tinyrainbow": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
++ "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
++ "dev": true,
++ "license": "MIT",
++ "engines": {
++ "node": ">=14.0.0"
++ }
++ },
+ "node_modules/tldts": {
+ "version": "6.1.86",
+ "dev": true,
+@@ -12753,6 +13166,526 @@
+ }
+ }
+ },
++ "node_modules/vite": {
++ "version": "8.0.14",
++ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.14.tgz",
++ "integrity": "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "lightningcss": "^1.32.0",
++ "picomatch": "^4.0.4",
++ "postcss": "^8.5.15",
++ "rolldown": "1.0.2",
++ "tinyglobby": "^0.2.16"
++ },
++ "bin": {
++ "vite": "bin/vite.js"
++ },
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ },
++ "funding": {
++ "url": "https://github.com/vitejs/vite?sponsor=1"
++ },
++ "optionalDependencies": {
++ "fsevents": "~2.3.3"
++ },
++ "peerDependencies": {
++ "@types/node": "^20.19.0 || >=22.12.0",
++ "@vitejs/devtools": "^0.1.18",
++ "esbuild": "^0.27.0 || ^0.28.0",
++ "jiti": ">=1.21.0",
++ "less": "^4.0.0",
++ "sass": "^1.70.0",
++ "sass-embedded": "^1.70.0",
++ "stylus": ">=0.54.8",
++ "sugarss": "^5.0.0",
++ "terser": "^5.16.0",
++ "tsx": "^4.8.1",
++ "yaml": "^2.4.2"
++ },
++ "peerDependenciesMeta": {
++ "@types/node": {
++ "optional": true
++ },
++ "@vitejs/devtools": {
++ "optional": true
++ },
++ "esbuild": {
++ "optional": true
++ },
++ "jiti": {
++ "optional": true
++ },
++ "less": {
++ "optional": true
++ },
++ "sass": {
++ "optional": true
++ },
++ "sass-embedded": {
++ "optional": true
++ },
++ "stylus": {
++ "optional": true
++ },
++ "sugarss": {
++ "optional": true
++ },
++ "terser": {
++ "optional": true
++ },
++ "tsx": {
++ "optional": true
++ },
++ "yaml": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/vite/node_modules/@oxc-project/types": {
++ "version": "0.132.0",
++ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.132.0.tgz",
++ "integrity": "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==",
++ "dev": true,
++ "license": "MIT",
++ "funding": {
++ "url": "https://github.com/sponsors/Boshen"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-android-arm64": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz",
++ "integrity": "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "android"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-darwin-arm64": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.2.tgz",
++ "integrity": "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "darwin"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-darwin-x64": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.2.tgz",
++ "integrity": "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==",
++ "cpu": [
++ "x64"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "darwin"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-freebsd-x64": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.2.tgz",
++ "integrity": "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==",
++ "cpu": [
++ "x64"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "freebsd"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-linux-arm-gnueabihf": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.2.tgz",
++ "integrity": "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==",
++ "cpu": [
++ "arm"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-gnu": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.2.tgz",
++ "integrity": "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "libc": [
++ "glibc"
++ ],
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-musl": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.2.tgz",
++ "integrity": "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "libc": [
++ "musl"
++ ],
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-linux-ppc64-gnu": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.2.tgz",
++ "integrity": "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==",
++ "cpu": [
++ "ppc64"
++ ],
++ "dev": true,
++ "libc": [
++ "glibc"
++ ],
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-linux-s390x-gnu": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.2.tgz",
++ "integrity": "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==",
++ "cpu": [
++ "s390x"
++ ],
++ "dev": true,
++ "libc": [
++ "glibc"
++ ],
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-linux-x64-gnu": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.2.tgz",
++ "integrity": "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==",
++ "cpu": [
++ "x64"
++ ],
++ "dev": true,
++ "libc": [
++ "glibc"
++ ],
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-linux-x64-musl": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.2.tgz",
++ "integrity": "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==",
++ "cpu": [
++ "x64"
++ ],
++ "dev": true,
++ "libc": [
++ "musl"
++ ],
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-openharmony-arm64": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.2.tgz",
++ "integrity": "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "openharmony"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-wasm32-wasi": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.2.tgz",
++ "integrity": "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==",
++ "cpu": [
++ "wasm32"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "dependencies": {
++ "@emnapi/core": "1.10.0",
++ "@emnapi/runtime": "1.10.0",
++ "@napi-rs/wasm-runtime": "^1.1.4"
++ },
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-win32-arm64-msvc": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.2.tgz",
++ "integrity": "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==",
++ "cpu": [
++ "arm64"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "win32"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/binding-win32-x64-msvc": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.2.tgz",
++ "integrity": "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==",
++ "cpu": [
++ "x64"
++ ],
++ "dev": true,
++ "license": "MIT",
++ "optional": true,
++ "os": [
++ "win32"
++ ],
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ }
++ },
++ "node_modules/vite/node_modules/@rolldown/pluginutils": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
++ "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
++ "dev": true,
++ "license": "MIT"
++ },
++ "node_modules/vite/node_modules/picomatch": {
++ "version": "4.0.4",
++ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
++ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
++ "dev": true,
++ "license": "MIT",
++ "engines": {
++ "node": ">=12"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/jonschlinkert"
++ }
++ },
++ "node_modules/vite/node_modules/rolldown": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.2.tgz",
++ "integrity": "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "@oxc-project/types": "=0.132.0",
++ "@rolldown/pluginutils": "^1.0.0"
++ },
++ "bin": {
++ "rolldown": "bin/cli.mjs"
++ },
++ "engines": {
++ "node": "^20.19.0 || >=22.12.0"
++ },
++ "optionalDependencies": {
++ "@rolldown/binding-android-arm64": "1.0.2",
++ "@rolldown/binding-darwin-arm64": "1.0.2",
++ "@rolldown/binding-darwin-x64": "1.0.2",
++ "@rolldown/binding-freebsd-x64": "1.0.2",
++ "@rolldown/binding-linux-arm-gnueabihf": "1.0.2",
++ "@rolldown/binding-linux-arm64-gnu": "1.0.2",
++ "@rolldown/binding-linux-arm64-musl": "1.0.2",
++ "@rolldown/binding-linux-ppc64-gnu": "1.0.2",
++ "@rolldown/binding-linux-s390x-gnu": "1.0.2",
++ "@rolldown/binding-linux-x64-gnu": "1.0.2",
++ "@rolldown/binding-linux-x64-musl": "1.0.2",
++ "@rolldown/binding-openharmony-arm64": "1.0.2",
++ "@rolldown/binding-wasm32-wasi": "1.0.2",
++ "@rolldown/binding-win32-arm64-msvc": "1.0.2",
++ "@rolldown/binding-win32-x64-msvc": "1.0.2"
++ }
++ },
++ "node_modules/vitest": {
++ "version": "4.1.7",
++ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.7.tgz",
++ "integrity": "sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==",
++ "dev": true,
++ "license": "MIT",
++ "dependencies": {
++ "@vitest/expect": "4.1.7",
++ "@vitest/mocker": "4.1.7",
++ "@vitest/pretty-format": "4.1.7",
++ "@vitest/runner": "4.1.7",
++ "@vitest/snapshot": "4.1.7",
++ "@vitest/spy": "4.1.7",
++ "@vitest/utils": "4.1.7",
++ "es-module-lexer": "^2.0.0",
++ "expect-type": "^1.3.0",
++ "magic-string": "^0.30.21",
++ "obug": "^2.1.1",
++ "pathe": "^2.0.3",
++ "picomatch": "^4.0.3",
++ "std-env": "^4.0.0-rc.1",
++ "tinybench": "^2.9.0",
++ "tinyexec": "^1.0.2",
++ "tinyglobby": "^0.2.15",
++ "tinyrainbow": "^3.1.0",
++ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
++ "why-is-node-running": "^2.3.0"
++ },
++ "bin": {
++ "vitest": "vitest.mjs"
++ },
++ "engines": {
++ "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/vitest"
++ },
++ "peerDependencies": {
++ "@edge-runtime/vm": "*",
++ "@opentelemetry/api": "^1.9.0",
++ "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
++ "@vitest/browser-playwright": "4.1.7",
++ "@vitest/browser-preview": "4.1.7",
++ "@vitest/browser-webdriverio": "4.1.7",
++ "@vitest/coverage-istanbul": "4.1.7",
++ "@vitest/coverage-v8": "4.1.7",
++ "@vitest/ui": "4.1.7",
++ "happy-dom": "*",
++ "jsdom": "*",
++ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
++ },
++ "peerDependenciesMeta": {
++ "@edge-runtime/vm": {
++ "optional": true
++ },
++ "@opentelemetry/api": {
++ "optional": true
++ },
++ "@types/node": {
++ "optional": true
++ },
++ "@vitest/browser-playwright": {
++ "optional": true
++ },
++ "@vitest/browser-preview": {
++ "optional": true
++ },
++ "@vitest/browser-webdriverio": {
++ "optional": true
++ },
++ "@vitest/coverage-istanbul": {
++ "optional": true
++ },
++ "@vitest/coverage-v8": {
++ "optional": true
++ },
++ "@vitest/ui": {
++ "optional": true
++ },
++ "happy-dom": {
++ "optional": true
++ },
++ "jsdom": {
++ "optional": true
++ },
++ "vite": {
++ "optional": false
++ }
++ }
++ },
++ "node_modules/vitest/node_modules/picomatch": {
++ "version": "4.0.4",
++ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
++ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
++ "dev": true,
++ "license": "MIT",
++ "engines": {
++ "node": ">=12"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/jonschlinkert"
++ }
++ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "dev": true,
+diff --git a/package.json b/package.json
+index 8d964fa..908f1b3 100644
+--- a/package.json
++++ b/package.json
+@@ -11,7 +11,8 @@
+ },
+ "devDependencies": {
+ "@playwright/test": "^1.43.0",
+- "@types/node": "^20.0.0"
++ "@types/node": "^20.0.0",
++ "vitest": "^4.1.7"
+ },
+ "optionalDependencies": {
+ "@next/swc-linux-x64-gnu": "16.1.6",
diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs
index 4063449e..20fa33bc 100644
--- a/contracts/escrow/src/lib.rs
+++ b/contracts/escrow/src/lib.rs
@@ -42,6 +42,23 @@ pub struct EscrowJob {
pub milestone_count: u32,
}
+#[contracttype]
+#[derive(Clone, Debug, PartialEq)]
+pub struct TreasuryConfig {
+ pub routing_address: Address,
+ pub fee_bps: u32,
+}
+
+#[contracttype]
+#[derive(Clone)]
+pub struct FeeConfigUpdatedEvent {
+ pub treasury: Address,
+ pub fee_bps: u32,
+ pub updated_at: u64,
+}
+
+pub const MAX_FEE_BPS: u32 = 10_000;
+
#[contracttype]
pub enum DataKey {
Job(u64),
@@ -49,6 +66,7 @@ pub enum DataKey {
AgentJudge,
GuardFlag(u64),
Milestone(u64, u32),
+ Treasury,
}
#[contracttype]
@@ -89,6 +107,41 @@ impl EscrowContract {
.set(&DataKey::AgentJudge, &new_agent_judge);
}
+ pub fn configure_treasury(env: Env, routing_address: Address, fee_bps: u32) {
+ let admin: Address = env
+ .storage()
+ .instance()
+ .get(&DataKey::Admin)
+ .expect("not initialized");
+ admin.require_auth();
+
+ assert!(fee_bps <= MAX_FEE_BPS, "FeeTooHigh");
+
+ let config = TreasuryConfig {
+ routing_address: routing_address.clone(),
+ fee_bps,
+ };
+
+ env.storage().instance().set(&DataKey::Treasury, &config);
+
+ env.events().publish(
+ ("escrow", "FeeConfigUpdated"),
+ FeeConfigUpdatedEvent {
+ treasury: routing_address,
+ fee_bps,
+ updated_at: env.ledger().timestamp(),
+ },
+ );
+ }
+
+ pub fn get_treasury(env: Env) -> Option {
+ if let Some(config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
+ Some(config.routing_address)
+ } else {
+ None
+ }
+ }
+
/// Client creates a job entry in Setup phase.
pub fn create_job(
env: Env,
@@ -359,11 +412,33 @@ impl EscrowContract {
assert!(total_payout <= remaining, "payout exceeds remaining funds");
let token_client = token::Client::new(&env, &job.token);
- if payee_amount > 0 {
+ let mut freelancer_amount = payee_amount;
+
+ if let Some(treasury_config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
+ let fee = payee_amount
+ .checked_mul(treasury_config.fee_bps as i128)
+ .expect("overflow")
+ .checked_div(10000)
+ .expect("overflow");
+
+ if fee > 0 {
+ freelancer_amount = payee_amount
+ .checked_sub(fee)
+ .expect("overflow");
+
+ token_client.transfer(
+ &env.current_contract_address(),
+ &treasury_config.routing_address,
+ &fee,
+ );
+ }
+ }
+
+ if freelancer_amount > 0 {
token_client.transfer(
&env.current_contract_address(),
&job.freelancer,
- &payee_amount,
+ &freelancer_amount,
);
}
if payer_amount > 0 {
@@ -486,12 +561,7 @@ impl EscrowContract {
.expect("overflow");
job.status = EscrowStatus::WorkInProgress;
- let token_client = token::Client::new(&env, &job.token);
- token_client.transfer(
- &env.current_contract_address(),
- &job.freelancer,
- &milestone.amount,
- );
+ Self::payout_with_fee(&env, job, milestone.amount);
if job.released_amount == job.total_amount {
job.status = EscrowStatus::Completed;
@@ -499,6 +569,39 @@ impl EscrowContract {
env.storage().persistent().set(&DataKey::Job(job_id), job);
}
+
+ fn payout_with_fee(env: &Env, job: &EscrowJob, amount: i128) {
+ let token_client = token::Client::new(env, &job.token);
+ let mut freelancer_amount = amount;
+
+ if let Some(treasury_config) = env.storage().instance().get::<_, TreasuryConfig>(&DataKey::Treasury) {
+ let fee = amount
+ .checked_mul(treasury_config.fee_bps as i128)
+ .expect("overflow")
+ .checked_div(10000)
+ .expect("overflow");
+
+ if fee > 0 {
+ freelancer_amount = amount
+ .checked_sub(fee)
+ .expect("overflow");
+
+ token_client.transfer(
+ &env.current_contract_address(),
+ &treasury_config.routing_address,
+ &fee,
+ );
+ }
+ }
+
+ if freelancer_amount > 0 {
+ token_client.transfer(
+ &env.current_contract_address(),
+ &job.freelancer,
+ &freelancer_amount,
+ );
+ }
+ }
}
#[cfg(test)]
diff --git a/contracts/escrow/test_output.log b/contracts/escrow/test_output.log
new file mode 100644
index 00000000..78b4ab30
--- /dev/null
+++ b/contracts/escrow/test_output.log
@@ -0,0 +1,338 @@
+warning: unused variable: `job_id`
+ --> contracts/escrow/src/lib.rs:375:35
+ |
+375 | ...yout_with_fee(env: &Env, job_id: u64, job: &EscrowJob, amount: i128)...
+ | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_job_id`
+ |
+ = note: `#[warn(unused_variables)]` on by default
+
+warning: variable does not need to be mutable
+ --> contracts/escrow/src/lib.rs:1178:13
+ |
+1178 | let mut job: EscrowJob = env
+ | ----^^^
+ | |
+ | help: remove this `mut`
+ |
+ = note: `#[warn(unused_mut)]` on by default
+
+warning: `escrow` (lib) generated 2 warnings (run `cargo fix --lib -p escrow` to apply 1 suggestion)
+warning: `escrow` (lib test) generated 2 warnings (2 duplicates)
+ Finished `test` profile [unoptimized + debuginfo] target(s) in 0.81s
+ Running unittests src/lib.rs (/home/kaycee/Desktop/OS/lance/target/debug/deps/escrow-28de2df4515832fa)
+
+running 60 tests
+test test::test_cancel_brief_in_setup_marks_refunded_without_transfer ... ok
+test test::test_deposit_event_emitted ... ok
+test test::test_add_milestone_over_max_panics - should panic ... ok
+test test::test_add_milestone_over_max_budget_panics - should panic ... ok
+test test::test_deposit_invalid_state_not_setup - should panic ... ok
+test test::test_deposit_no_milestones_panics - should panic ... ok
+test test::test_deposit_negative_panics - should panic ... ok
+test test::test_add_milestone_limit_panics - should panic ... ok
+test test::test_deposit_success_transitions_to_funded ... ok
+test test::test_deposit_with_wrong_total_panics - should panic ... ok
+test test::test_deposit_zero_panics - should panic ... ok
+test test::test_deposit_reentrancy_guard_panics - should panic ... ok
+test test::test_dispute_deadline_set_on_raise ... ok
+test test::test_double_create_job_panics - should panic ... ok
+test test::test_deposit_with_wrong_total_panics_2 - should panic ... FAILED
+test test::test_double_init - should panic ... ok
+test test::test_dispute_event_emission ... ok
+test test::test_double_release_milestone_is_blocked - should panic ... ok
+test test::test_expire_dispute_refunds_client_after_deadline ... ok
+test test::test_dispute_50_50_split ... ok
+test test::test_get_job_not_found_panics - should panic ... ok
+test test::test_instance_config_getters ... ok
+test test::test_get_multisig_config ... ok
+test test::test_open_dispute_on_completed_panics - should panic ... ok
+test test::test_open_dispute_by_rando_panics - should panic ... ok
+test test::test_exhaustive_release_funds_path ... ok
+test test::test_raise_dispute_by_freelancer_locks_funds ... ok
+test test::test_happy_path_lifecycle ... ok
+test test::test_raise_dispute_blocks_release_funds ... ok
+test test::test_raise_dispute_by_client_locks_funds ... ok
+test test::test_reentrant_refund_panics - should panic ... FAILED
+test test::test_raise_dispute_by_third_party_panics - should panic ... ok
+test test::test_raise_dispute_on_completed_job_panics - should panic ... ok
+test test::test_refund ... FAILED
+test test::test_reentrant_release_funds_panics - should panic ... ok
+test test::test_refund_reentrant_lock_panics - should panic ... FAILED
+test test::test_release_funds_invalid_index_panics_2 - should panic ... FAILED
+test test::test_reentrant_release_milestone_panics - should panic ... ok
+test test::test_refund_by_non_client_panics - should panic ... ok
+test test::test_release_funds_reentrant_lock_panics - should panic ... ok
+test test::test_release_funds_invalid_index_panics - should panic ... ok
+test test::test_release_funds_twice_panics - should panic ... ok
+test test::test_release_milestone_no_pending_milestones - should panic ... ok
+test test::test_release_milestone_reentrancy_guard_panics - should panic ... ok
+test test::test_release_milestone_overflow_panics - should panic ... ok
+test test::test_release_milestone_reentrant_lock_panics - should panic ... FAILED
+test test::test_release_milestone_unauthorized_freelancer - should panic ... ok
+test test::test_resolve_after_deadline_fails - should panic ... ok
+test test::test_released_amount_matches_transferred_on_sequential_release ... ok
+test test::test_release_milestone_sequential_success ... ok
+test test::test_resolve_before_deadline_succeeds ... ok
+test test::test_set_agent_judge_updates_packed_config ... ok
+test test::test_resolve_dispute_full_payout_to_freelancer ... ok
+test test::test_token_decimals_stored_on_deposit ... ok
+test test::test_resolve_dispute_panics - should panic ... FAILED
+test test::test_resolve_dispute_full_refund_to_client ... ok
+test test::test_version ... ok
+test test::test_unauthorized_release - should panic ... ok
+test test::test_unauthorized_release_funds_by_freelancer_panics - should panic ... ok
+test test::test_variable_milestone_amounts ... ok
+
+failures:
+
+---- test::test_deposit_with_wrong_total_panics_2 stdout ----
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 1000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 2000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 3000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 6000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["release_funds: job {} amount {}", 1, 3000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["release_funds: job {} amount {}", 1, 1000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["release_funds: job {} amount {}", 1, 2000]
+Writing test snapshot file for test "test::test_deposit_with_wrong_total_panics_2" to "test_snapshots/test/test_deposit_with_wrong_total_panics_2.1.json".
+note: test did not panic as expected at contracts/escrow/src/lib.rs:2628:8
+---- test::test_reentrant_refund_panics stdout ----
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 5000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 5000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["refund: job {} amount {}", 1, 5000]
+Writing test snapshot file for test "test::test_reentrant_refund_panics" to "test_snapshots/test/test_reentrant_refund_panics.1.json".
+note: test did not panic as expected at contracts/escrow/src/lib.rs:3445:8
+---- test::test_refund stdout ----
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 2500]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 2500]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 5000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["refund: job {} amount {}", 1, 5000]
+
+thread 'test::test_refund' panicked at contracts/escrow/src/lib.rs:2110:9:
+assertion `left == right` failed
+ left: Funded
+ right: Refunded
+Writing test snapshot file for test "test::test_refund" to "test_snapshots/test/test_refund.1.json".
+
+---- test::test_refund_reentrant_lock_panics stdout ----
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 10000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
+
+thread 'test::test_refund_reentrant_lock_panics' panicked at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:768:9:
+HostError: Error(Contract, #23)
+
+Event log (newest first):
+ 0: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:"escalating error to panic"
+ 1: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:["contract call failed", refund, [1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]]
+ 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #23)], data:"escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, refund], data:Error(Contract, #23)
+ 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), refund], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]
+ 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void
+ 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Deposit"], data:{amount: 10000, deposited_at: 0, job_id: 1}
+ 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
+ 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void
+ 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"], data:10000
+ 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 10000]
+ 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7
+ 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void
+ 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 10000]
+ 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void
+ 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 10000]
+ 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 10000]
+ 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void
+ 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+ 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]
+ 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void
+ 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Initialized"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]
+ 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+ 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+ 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void
+ 25: ... 7 events elided ...
+
+Backtrace (newest first):
+ 0: ::escalate_error_to_panic
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31
+ 1: soroban_sdk::env::internal::reject_err::{{closure}}
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27
+ 2: core::result::Result::map_err
+ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27
+ 3: soroban_sdk::env::internal::reject_err
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11
+ 4: ::call
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13
+ 5: soroban_sdk::env::Env::invoke_contract
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18
+ 6: escrow::EscrowContractClient::refund
+ at src/lib.rs:335:1
+ 7: escrow::test::test_refund_reentrant_lock_panics
+ at src/lib.rs:2621:12
+ 8: escrow::test::test_refund_reentrant_lock_panics::{{closure}}
+ at src/lib.rs:2600:43
+ 9: core::ops::function::FnOnce::call_once
+ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5
+
+
+Writing test snapshot file for test "test::test_refund_reentrant_lock_panics" to "test_snapshots/test/test_refund_reentrant_lock_panics.1.json".
+note: panic did not contain expected string
+ panic message: "HostError: Error(Contract, #23)\n\nEvent log (newest first):\n 0: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:\"escalating error to panic\"\n 1: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:[\"contract call failed\", refund, [1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]]\n 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #23)], data:\"escalating Ok(ScErrorType::Contract) frame-exit to Err\"\n 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, refund], data:Error(Contract, #23)\n 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), refund], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]\n 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void\n 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Deposit\"], data:{amount: 10000, deposited_at: 0, job_id: 1}\n 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"deposit: job {} amount {}\", 1, 10000]\n 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void\n 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, \"aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV\"], data:10000\n 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 10000]\n 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7\n 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void\n 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 10000]\n 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void\n 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"add_milestone: job {} amount {}\", 1, 10000]\n 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 10000]\n 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void\n 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"create_job: id {} client {} freelancer {}\", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]\n 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]\n 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void\n 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Initialized\"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]\n 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"Escrow initialized with admin: {} and agent_judge: {}\", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void\n 25: ... 7 events elided ...\n\nBacktrace (newest first):\n 0: ::escalate_error_to_panic\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31\n 1: soroban_sdk::env::internal::reject_err::{{closure}}\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27\n 2: core::result::Result::map_err\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27\n 3: soroban_sdk::env::internal::reject_err\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11\n 4: ::call\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13\n 5: soroban_sdk::env::Env::invoke_contract\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18\n 6: escrow::EscrowContractClient::refund\n at src/lib.rs:335:1\n 7: escrow::test::test_refund_reentrant_lock_panics\n at src/lib.rs:2621:12\n 8: escrow::test::test_refund_reentrant_lock_panics::{{closure}}\n at src/lib.rs:2600:43\n 9: core::ops::function::FnOnce::call_once\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5\n\n"
+ expected substring: "Error(Contract, #11)"
+---- test::test_release_funds_invalid_index_panics_2 stdout ----
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 5000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 5000]
+
+thread 'test::test_release_funds_invalid_index_panics_2' panicked at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:768:9:
+HostError: Error(Contract, #6)
+
+Event log (newest first):
+ 0: [Diagnostic Event] topics:[error, Error(Contract, #6)], data:"escalating error to panic"
+ 1: [Diagnostic Event] topics:[error, Error(Contract, #6)], data:["contract call failed", resolve_dispute, [1, 2500, 2500]]
+ 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #6)], data:"escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, resolve_dispute], data:Error(Contract, #6)
+ 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), resolve_dispute], data:[1, 2500, 2500]
+ 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void
+ 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Deposit"], data:{amount: 5000, deposited_at: 0, job_id: 1}
+ 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 5000]
+ 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void
+ 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"], data:5000
+ 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 5000]
+ 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7
+ 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void
+ 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 5000]
+ 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void
+ 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 5000]
+ 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 5000]
+ 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void
+ 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+ 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]
+ 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void
+ 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Initialized"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]
+ 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+ 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+ 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void
+ 25: ... 7 events elided ...
+
+Backtrace (newest first):
+ 0: ::escalate_error_to_panic
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31
+ 1: soroban_sdk::env::internal::reject_err::{{closure}}
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27
+ 2: core::result::Result::map_err
+ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27
+ 3: soroban_sdk::env::internal::reject_err
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11
+ 4: ::call
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13
+ 5: soroban_sdk::env::Env::invoke_contract
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18
+ 6: escrow::EscrowContractClient::resolve_dispute
+ at src/lib.rs:335:1
+ 7: escrow::test::test_release_funds_invalid_index_panics_2
+ at src/lib.rs:3118:12
+ 8: escrow::test::test_release_funds_invalid_index_panics_2::{{closure}}
+ at src/lib.rs:3097:51
+ 9: core::ops::function::FnOnce::call_once
+ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5
+
+
+Writing test snapshot file for test "test::test_release_funds_invalid_index_panics_2" to "test_snapshots/test/test_release_funds_invalid_index_panics_2.1.json".
+note: panic did not contain expected string
+ panic message: "HostError: Error(Contract, #6)\n\nEvent log (newest first):\n 0: [Diagnostic Event] topics:[error, Error(Contract, #6)], data:\"escalating error to panic\"\n 1: [Diagnostic Event] topics:[error, Error(Contract, #6)], data:[\"contract call failed\", resolve_dispute, [1, 2500, 2500]]\n 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #6)], data:\"escalating Ok(ScErrorType::Contract) frame-exit to Err\"\n 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, resolve_dispute], data:Error(Contract, #6)\n 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), resolve_dispute], data:[1, 2500, 2500]\n 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void\n 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Deposit\"], data:{amount: 5000, deposited_at: 0, job_id: 1}\n 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"deposit: job {} amount {}\", 1, 5000]\n 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void\n 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, \"aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV\"], data:5000\n 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 5000]\n 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7\n 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void\n 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 5000]\n 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void\n 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"add_milestone: job {} amount {}\", 1, 5000]\n 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 5000]\n 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void\n 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"create_job: id {} client {} freelancer {}\", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]\n 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]\n 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void\n 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Initialized\"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]\n 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"Escrow initialized with admin: {} and agent_judge: {}\", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void\n 25: ... 7 events elided ...\n\nBacktrace (newest first):\n 0: ::escalate_error_to_panic\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31\n 1: soroban_sdk::env::internal::reject_err::{{closure}}\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27\n 2: core::result::Result::map_err\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27\n 3: soroban_sdk::env::internal::reject_err\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11\n 4: ::call\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13\n 5: soroban_sdk::env::Env::invoke_contract\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18\n 6: escrow::EscrowContractClient::resolve_dispute\n at src/lib.rs:335:1\n 7: escrow::test::test_release_funds_invalid_index_panics_2\n at src/lib.rs:3118:12\n 8: escrow::test::test_release_funds_invalid_index_panics_2::{{closure}}\n at src/lib.rs:3097:51\n 9: core::ops::function::FnOnce::call_once\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5\n\n"
+ expected substring: "invalid milestone index"
+---- test::test_release_milestone_reentrant_lock_panics stdout ----
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 10000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
+
+thread 'test::test_release_milestone_reentrant_lock_panics' panicked at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:768:9:
+HostError: Error(Contract, #23)
+
+Event log (newest first):
+ 0: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:"escalating error to panic"
+ 1: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:["contract call failed", release_milestone, [1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]]
+ 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #23)], data:"escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, release_milestone], data:Error(Contract, #23)
+ 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), release_milestone], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]
+ 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void
+ 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Deposit"], data:{amount: 10000, deposited_at: 0, job_id: 1}
+ 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
+ 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void
+ 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"], data:10000
+ 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 10000]
+ 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7
+ 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void
+ 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 10000]
+ 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void
+ 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 10000]
+ 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 10000]
+ 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void
+ 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+ 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]
+ 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void
+ 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:["escrow", "Initialized"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]
+ 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+ 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+ 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void
+ 25: ... 7 events elided ...
+
+Backtrace (newest first):
+ 0: ::escalate_error_to_panic
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31
+ 1: soroban_sdk::env::internal::reject_err::{{closure}}
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27
+ 2: core::result::Result::map_err
+ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27
+ 3: soroban_sdk::env::internal::reject_err
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11
+ 4: ::call
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13
+ 5: soroban_sdk::env::Env::invoke_contract
+ at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18
+ 6: escrow::EscrowContractClient::release_milestone
+ at src/lib.rs:335:1
+ 7: escrow::test::test_release_milestone_reentrant_lock_panics
+ at src/lib.rs:2958:12
+ 8: escrow::test::test_release_milestone_reentrant_lock_panics::{{closure}}
+ at src/lib.rs:2937:54
+ 9: core::ops::function::FnOnce::call_once
+ at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5
+
+
+Writing test snapshot file for test "test::test_release_milestone_reentrant_lock_panics" to "test_snapshots/test/test_release_milestone_reentrant_lock_panics.1.json".
+note: panic did not contain expected string
+ panic message: "HostError: Error(Contract, #23)\n\nEvent log (newest first):\n 0: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:\"escalating error to panic\"\n 1: [Diagnostic Event] topics:[error, Error(Contract, #23)], data:[\"contract call failed\", release_milestone, [1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]]\n 2: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[error, Error(Contract, #23)], data:\"escalating Ok(ScErrorType::Contract) frame-exit to Err\"\n 3: [Failed Diagnostic Event (not emitted)] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, release_milestone], data:Error(Contract, #23)\n 4: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), release_milestone], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M]\n 5: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, deposit], data:Void\n 6: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Deposit\"], data:{amount: 10000, deposited_at: 0, job_id: 1}\n 7: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"deposit: job {} amount {}\", 1, 10000]\n 8: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, transfer], data:Void\n 9: [Contract Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[transfer, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, \"aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV\"], data:10000\n 10: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), transfer], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, 10000]\n 11: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, decimals], data:7\n 12: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_call, Bytes(d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73), decimals], data:Void\n 13: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), deposit], data:[1, 10000]\n 14: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, add_milestone], data:Void\n 15: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"add_milestone: job {} amount {}\", 1, 10000]\n 16: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), add_milestone], data:[1, 10000]\n 17: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, create_job], data:Void\n 18: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"create_job: id {} client {} freelancer {}\", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]\n 19: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), create_job], data:[1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4, CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG]\n 20: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[fn_return, initialize], data:Void\n 21: [Contract Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[\"escrow\", \"Initialized\"], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4, 0]\n 22: [Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:[\"Escrow initialized with admin: {} and agent_judge: {}\", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 23: [Diagnostic Event] topics:[fn_call, Bytes(0000000000000000000000000000000000000000000000000000000000000006), initialize], data:[CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]\n 24: [Diagnostic Event] contract:CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG, topics:[fn_return, mint], data:Void\n 25: ... 7 events elided ...\n\nBacktrace (newest first):\n 0: ::escalate_error_to_panic\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-env-host-21.2.1/src/host.rs:767:31\n 1: soroban_sdk::env::internal::reject_err::{{closure}}\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:27\n 2: core::result::Result::map_err\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/result.rs:914:27\n 3: soroban_sdk::env::internal::reject_err\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:52:11\n 4: ::call\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:1667:13\n 5: soroban_sdk::env::Env::invoke_contract\n at /home/kaycee/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/soroban-sdk-21.7.7/src/env.rs:379:18\n 6: escrow::EscrowContractClient::release_milestone\n at src/lib.rs:335:1\n 7: escrow::test::test_release_milestone_reentrant_lock_panics\n at src/lib.rs:2958:12\n 8: escrow::test::test_release_milestone_reentrant_lock_panics::{{closure}}\n at src/lib.rs:2937:54\n 9: core::ops::function::FnOnce::call_once\n at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5\n\n"
+ expected substring: "Error(Contract, #11)"
+---- test::test_resolve_dispute_panics stdout ----
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["Escrow initialized with admin: {} and agent_judge: {}", CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["create_job: id {} client {} freelancer {}", 1, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M, CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 3000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 3000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["add_milestone: job {} amount {}", 1, 4000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["deposit: job {} amount {}", 1, 10000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["release_milestone: job {} amount {}", 1, 3000]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["raise_dispute: job {}", 1]
+[Diagnostic Event] contract:CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4, topics:[log], data:["resolve_dispute: job {} payee {} payer {}", 1, 4900, 2100]
+Writing test snapshot file for test "test::test_resolve_dispute_panics" to "test_snapshots/test/test_resolve_dispute_panics.1.json".
+note: test did not panic as expected at contracts/escrow/src/lib.rs:2963:8
+
+failures:
+ test::test_deposit_with_wrong_total_panics_2
+ test::test_reentrant_refund_panics
+ test::test_refund
+ test::test_refund_reentrant_lock_panics
+ test::test_release_funds_invalid_index_panics_2
+ test::test_release_milestone_reentrant_lock_panics
+ test::test_resolve_dispute_panics
+
+test result: FAILED. 53 passed; 7 failed; 0 ignored; 0 measured; 0 filtered out; finished in 18.50s
+
+error: test failed, to rerun pass `--lib`
diff --git a/contracts/escrow/test_snapshots/test/test_add_milestone_limit_panics.1.json b/contracts/escrow/test_snapshots/test/test_add_milestone_limit_panics.1.json
index 5b0dd699..bed749f8 100644
--- a/contracts/escrow/test_snapshots/test/test_add_milestone_limit_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_add_milestone_limit_panics.1.json
@@ -2203,6 +2203,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -6764,7 +6772,7 @@
"data": {
"vec": [
{
- "string": "caught panic 'too many milestones' from contract function 'Symbol(obj#4701)'"
+ "string": "caught panic 'too many milestones' from contract function 'Symbol(obj#4831)'"
},
{
"u64": 1
diff --git a/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_budget_panics.1.json b/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_budget_panics.1.json
index c01383cd..7e92896a 100644
--- a/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_budget_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_budget_panics.1.json
@@ -405,6 +405,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -1339,7 +1347,7 @@
"data": {
"vec": [
{
- "string": "caught panic 'job budget exceeds maximum' from contract function 'Symbol(obj#299)'"
+ "string": "caught panic 'job budget exceeds maximum' from contract function 'Symbol(obj#305)'"
},
{
"u64": 1
diff --git a/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_panics.1.json b/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_panics.1.json
index 3efd5cf9..00b492c2 100644
--- a/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_add_milestone_over_max_panics.1.json
@@ -347,6 +347,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -1163,7 +1171,7 @@
"data": {
"vec": [
{
- "string": "caught panic 'milestone amount exceeds maximum' from contract function 'Symbol(obj#221)'"
+ "string": "caught panic 'milestone amount exceeds maximum' from contract function 'Symbol(obj#223)'"
},
{
"u64": 1
diff --git a/contracts/escrow/test_snapshots/test/test_cancel_brief_in_setup_marks_refunded_without_transfer.1.json b/contracts/escrow/test_snapshots/test/test_cancel_brief_in_setup_marks_refunded_without_transfer.1.json
index 049748df..95102c34 100644
--- a/contracts/escrow/test_snapshots/test/test_cancel_brief_in_setup_marks_refunded_without_transfer.1.json
+++ b/contracts/escrow/test_snapshots/test/test_cancel_brief_in_setup_marks_refunded_without_transfer.1.json
@@ -344,6 +344,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -1143,6 +1151,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_event_emitted.1.json b/contracts/escrow/test_snapshots/test/test_deposit_event_emitted.1.json
index b71a157f..e53ee0db 100644
--- a/contracts/escrow/test_snapshots/test/test_deposit_event_emitted.1.json
+++ b/contracts/escrow/test_snapshots/test/test_deposit_event_emitted.1.json
@@ -487,6 +487,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -1806,6 +1814,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_invalid_state_not_setup.1.json b/contracts/escrow/test_snapshots/test/test_deposit_invalid_state_not_setup.1.json
index a37c0496..341dcc50 100644
--- a/contracts/escrow/test_snapshots/test/test_deposit_invalid_state_not_setup.1.json
+++ b/contracts/escrow/test_snapshots/test/test_deposit_invalid_state_not_setup.1.json
@@ -545,6 +545,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_negative_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_negative_panics.1.json
index c1420167..023e6477 100644
--- a/contracts/escrow/test_snapshots/test/test_deposit_negative_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_deposit_negative_panics.1.json
@@ -405,6 +405,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json
index 3ce0e0d4..ff621a49 100644
--- a/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_deposit_no_milestones_panics.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -171,39 +150,6 @@
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": {
@@ -243,7 +189,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 4837995959683129791
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -258,7 +204,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 4837995959683129791
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -323,14 +269,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -349,10 +287,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": []
+ "u32": 0
}
},
{
@@ -366,14 +304,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -394,14 +324,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 0
- }
- },
{
"key": {
"symbol": "total_amount"
@@ -419,7 +341,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -449,29 +371,24 @@
"key": {
"vec": [
{
- "symbol": "Config"
+ "symbol": "Admin"
}
]
},
"val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
{
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
+ "symbol": "AgentJudge"
}
]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
]
@@ -481,7 +398,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -687,7 +604,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
]
]
@@ -935,69 +852,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Initialized"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1058,39 +912,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1157,16 +978,24 @@
"v0": {
"topics": [
{
- "symbol": "fn_return"
- },
- {
- "symbol": "deposit"
+ "symbol": "log"
}
],
"data": {
- "error": {
- "contract": 4
- }
+ "vec": [
+ {
+ "string": "caught panic 'no milestones defined' from contract function 'Symbol(deposit)'"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
}
}
}
@@ -1186,12 +1015,12 @@
},
{
"error": {
- "contract": 4
+ "wasm_vm": "invalid_action"
}
}
],
"data": {
- "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ "string": "caught error from function"
}
}
}
@@ -1211,7 +1040,7 @@
},
{
"error": {
- "contract": 4
+ "wasm_vm": "invalid_action"
}
}
],
@@ -1256,7 +1085,7 @@
},
{
"error": {
- "contract": 4
+ "wasm_vm": "invalid_action"
}
}
],
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_reentrancy_guard_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_reentrancy_guard_panics.1.json
index f5e8d4eb..a0e1e84c 100644
--- a/contracts/escrow/test_snapshots/test/test_deposit_reentrancy_guard_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_deposit_reentrancy_guard_panics.1.json
@@ -406,6 +406,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_success_transitions_to_funded.1.json b/contracts/escrow/test_snapshots/test/test_deposit_success_transitions_to_funded.1.json
index 681f0b88..3e585eb9 100644
--- a/contracts/escrow/test_snapshots/test/test_deposit_success_transitions_to_funded.1.json
+++ b/contracts/escrow/test_snapshots/test/test_deposit_success_transitions_to_funded.1.json
@@ -490,6 +490,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -1861,6 +1869,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json
index 3363e95a..5d2a662a 100644
--- a/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -196,39 +175,6 @@
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": {
@@ -268,7 +214,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 2032731177588607455
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -283,7 +229,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 2032731177588607455
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -381,14 +327,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -407,38 +345,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 1
}
},
{
@@ -452,14 +362,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -482,15 +384,70 @@
},
{
"key": {
- "symbol": "token_decimals"
+ "symbol": "total_amount"
},
"val": {
- "u32": 0
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
}
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
},
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
{
"key": {
- "symbol": "total_amount"
+ "symbol": "amount"
},
"val": {
"i128": {
@@ -498,6 +455,18 @@
"lo": 500
}
}
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
}
]
}
@@ -505,7 +474,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -535,29 +504,24 @@
"key": {
"vec": [
{
- "symbol": "Config"
+ "symbol": "Admin"
}
]
},
"val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
{
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
+ "symbol": "AgentJudge"
}
]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
]
@@ -567,7 +531,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -773,7 +737,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
]
]
@@ -1021,69 +985,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Initialized"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1144,39 +1045,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1234,39 +1102,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1333,16 +1168,24 @@
"v0": {
"topics": [
{
- "symbol": "fn_return"
- },
- {
- "symbol": "deposit"
+ "symbol": "log"
}
],
"data": {
- "error": {
- "contract": 7
- }
+ "vec": [
+ {
+ "string": "caught panic 'sum of milestones must equal total amount' from contract function 'Symbol(deposit)'"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
}
}
}
@@ -1362,12 +1205,12 @@
},
{
"error": {
- "contract": 7
+ "wasm_vm": "invalid_action"
}
}
],
"data": {
- "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ "string": "caught error from function"
}
}
}
@@ -1387,7 +1230,7 @@
},
{
"error": {
- "contract": 7
+ "wasm_vm": "invalid_action"
}
}
],
@@ -1432,7 +1275,7 @@
},
{
"error": {
- "contract": 7
+ "wasm_vm": "invalid_action"
}
}
],
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics_2.1.json b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics_2.1.json
new file mode 100644
index 00000000..416c4fca
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_deposit_with_wrong_total_panics_2.1.json
@@ -0,0 +1,3283 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_funds",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_funds",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_funds",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 94000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "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": {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "release_funds: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "release_funds: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "release_funds: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_deposit_zero_panics.1.json b/contracts/escrow/test_snapshots/test/test_deposit_zero_panics.1.json
index 9d73cce4..9dfb0b90 100644
--- a/contracts/escrow/test_snapshots/test/test_deposit_zero_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_deposit_zero_panics.1.json
@@ -405,6 +405,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json b/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json
index dc691903..c996256a 100644
--- a/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json
+++ b/contracts/escrow/test_snapshots/test/test_dispute_50_50_split.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -399,39 +378,6 @@
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": {
@@ -471,7 +417,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
"key": {
"ledger_key_nonce": {
- "nonce": 3126073502131104533
+ "nonce": 115220454072064130
}
},
"durability": "temporary"
@@ -486,7 +432,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
"key": {
"ledger_key_nonce": {
- "nonce": 3126073502131104533
+ "nonce": 115220454072064130
}
},
"durability": "temporary",
@@ -504,7 +450,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 1194852393571756375
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -519,7 +465,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 1194852393571756375
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -735,7 +681,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
"key": {
"ledger_key_nonce": {
- "nonce": 115220454072064130
+ "nonce": 1194852393571756375
}
},
"durability": "temporary"
@@ -750,7 +696,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
"key": {
"ledger_key_nonce": {
- "nonce": 115220454072064130
+ "nonce": 1194852393571756375
}
},
"durability": "temporary",
@@ -815,14 +761,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 604800
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -841,119 +779,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 4
}
},
{
@@ -967,14 +796,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -995,14 +816,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
@@ -1020,82 +833,23 @@
},
"ext": "v0"
},
- 150000
+ 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": "Config"
- }
- ]
- },
- "val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
- {
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- }
- ]
- }
- }
- ]
- }
- }
- }
- },
- "ext": "v0"
- },
- 150000
- ]
- ],
- [
- {
- "contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 0
}
]
},
@@ -1108,14 +862,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 0
}
]
},
@@ -1129,24 +886,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 93750
+ "lo": 2500
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1155,20 +908,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -1181,14 +937,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -1202,24 +961,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 6250
+ "lo": 2500
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
}
}
]
@@ -1228,20 +983,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -1254,14 +1012,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -1275,18 +1036,365 @@
"val": {
"i128": {
"hi": 0,
- "lo": 0
+ "lo": 2500
}
}
},
{
"key": {
- "symbol": "authorized"
+ "symbol": "status"
},
"val": {
- "bool": true
- }
- },
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 3
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 3
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ },
+ {
+ "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": "AgentJudge"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 93750
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6250
+ }
+ }
+ },
+ {
+ "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"
@@ -1434,7 +1542,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
]
]
@@ -1449,90 +1557,17 @@
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "init_asset"
- }
- ],
- "data": {
- "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "init_asset"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "set_admin"
- }
- ],
- "data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "set_admin"
+ "symbol": "fn_call"
},
{
- "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ "symbol": "init_asset"
}
],
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
}
}
}
@@ -1551,7 +1586,7 @@
"symbol": "fn_return"
},
{
- "symbol": "set_admin"
+ "symbol": "init_asset"
}
],
"data": "void"
@@ -1575,21 +1610,11 @@
"bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "mint"
+ "symbol": "set_admin"
}
],
"data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "i128": {
- "hi": 0,
- "lo": 100000
- }
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -1605,23 +1630,17 @@
"v0": {
"topics": [
{
- "symbol": "mint"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "symbol": "set_admin"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
},
{
"string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 100000
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -1640,7 +1659,7 @@
"symbol": "fn_return"
},
{
- "symbol": "mint"
+ "symbol": "set_admin"
}
],
"data": "void"
@@ -1661,49 +1680,22 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "initialize"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
+ "symbol": "mint"
}
],
"data": {
"vec": [
{
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
}
]
}
@@ -1715,123 +1707,29 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "contract",
"body": {
"v0": {
"topics": [
{
- "string": "escrow"
- },
- {
- "string": "Initialized"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
+ "symbol": "mint"
},
{
- "symbol": "initialize"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "symbol": "create_job"
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
+ "i128": {
+ "hi": 0,
+ "lo": 100000
}
- ],
- "data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
}
}
}
@@ -1841,7 +1739,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -1850,7 +1748,7 @@
"symbol": "fn_return"
},
{
- "symbol": "create_job"
+ "symbol": "mint"
}
],
"data": "void"
@@ -1874,52 +1772,16 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "add_milestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
+ "symbol": "initialize"
}
],
"data": {
"vec": [
{
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
},
{
- "i128": {
- "hi": 0,
- "lo": 2500
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
]
}
@@ -1940,7 +1802,7 @@
"symbol": "fn_return"
},
{
- "symbol": "add_milestone"
+ "symbol": "initialize"
}
],
"data": "void"
@@ -1964,52 +1826,22 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "add_milestone"
+ "symbol": "create_job"
}
],
"data": {
"vec": [
{
"u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
+ },
{
- "string": "add_milestone: job {} amount {}"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
},
{
- "i128": {
- "hi": 0,
- "lo": 2500
- }
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
]
}
@@ -2030,7 +1862,7 @@
"symbol": "fn_return"
},
{
- "symbol": "add_milestone"
+ "symbol": "create_job"
}
],
"data": "void"
@@ -2075,39 +1907,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2174,14 +1973,38 @@
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
}
],
"data": {
"vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
{
"u64": 1
},
@@ -2234,7 +2057,7 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "deposit"
+ "symbol": "add_milestone"
}
],
"data": {
@@ -2245,7 +2068,7 @@
{
"i128": {
"hi": 0,
- "lo": 10000
+ "lo": 2500
}
}
]
@@ -2264,13 +2087,10 @@
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "fn_return"
},
{
- "symbol": "decimals"
+ "symbol": "add_milestone"
}
],
"data": "void"
@@ -2282,20 +2102,33 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "decimals"
+ "symbol": "deposit"
}
],
"data": {
- "u32": 7
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
}
}
}
@@ -2394,90 +2227,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "deposit: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 10000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Deposit"
- }
- ],
- "data": {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 10000
- }
- }
- },
- {
- "key": {
- "symbol": "deposited_at"
- },
- "val": {
- "u64": 0
- }
- },
- {
- "key": {
- "symbol": "job_id"
- },
- "val": {
- "u64": 1
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2607,90 +2356,18 @@
"event": {
"ext": "v0",
"contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "transfer"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "ReleaseMilestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- },
- {
- "u64": 0
- }
- ]
- }
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
}
}
},
@@ -2802,66 +2479,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "open_dispute: job {}"
- },
- {
- "u64": 1
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "OpenDispute"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2942,14 +2559,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 604800
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -2968,119 +2577,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 4
}
},
{
@@ -3094,14 +2594,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -3122,14 +2614,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
@@ -3374,45 +2858,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "resolve_dispute: job {} payee {} payer {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3750
- }
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3750
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3493,14 +2938,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 604800
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -3519,119 +2956,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 4
}
},
{
@@ -3645,14 +2973,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -3673,14 +2993,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
diff --git a/contracts/escrow/test_snapshots/test/test_dispute_deadline_set_on_raise.1.json b/contracts/escrow/test_snapshots/test/test_dispute_deadline_set_on_raise.1.json
index 45ca821a..596e348f 100644
--- a/contracts/escrow/test_snapshots/test/test_dispute_deadline_set_on_raise.1.json
+++ b/contracts/escrow/test_snapshots/test/test_dispute_deadline_set_on_raise.1.json
@@ -542,6 +542,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_dispute_event_emission.1.json b/contracts/escrow/test_snapshots/test/test_dispute_event_emission.1.json
index 1b839297..93fb2ad2 100644
--- a/contracts/escrow/test_snapshots/test/test_dispute_event_emission.1.json
+++ b/contracts/escrow/test_snapshots/test/test_dispute_event_emission.1.json
@@ -542,6 +542,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -1981,6 +1989,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_double_create_job_panics.1.json b/contracts/escrow/test_snapshots/test/test_double_create_job_panics.1.json
index 0fdc3412..96e34da5 100644
--- a/contracts/escrow/test_snapshots/test/test_double_create_job_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_double_create_job_panics.1.json
@@ -130,14 +130,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -156,10 +148,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": []
+ "u32": 0
}
},
{
@@ -173,14 +165,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -201,14 +185,6 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 0
- }
- },
{
"key": {
"symbol": "total_amount"
@@ -226,7 +202,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -324,39 +300,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000004",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -426,16 +369,27 @@
"v0": {
"topics": [
{
- "symbol": "fn_return"
- },
- {
- "symbol": "create_job"
+ "symbol": "log"
}
],
"data": {
- "error": {
- "contract": 4
- }
+ "vec": [
+ {
+ "string": "caught panic 'job already exists' from contract function 'Symbol(obj#39)'"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
}
}
}
@@ -455,12 +409,12 @@
},
{
"error": {
- "contract": 4
+ "wasm_vm": "invalid_action"
}
}
],
"data": {
- "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ "string": "caught error from function"
}
}
}
@@ -480,7 +434,7 @@
},
{
"error": {
- "contract": 4
+ "wasm_vm": "invalid_action"
}
}
],
@@ -528,7 +482,7 @@
},
{
"error": {
- "contract": 4
+ "wasm_vm": "invalid_action"
}
}
],
diff --git a/contracts/escrow/test_snapshots/test/test_double_init.1.json b/contracts/escrow/test_snapshots/test/test_double_init.1.json
index a9e3dd9e..80b237c1 100644
--- a/contracts/escrow/test_snapshots/test/test_double_init.1.json
+++ b/contracts/escrow/test_snapshots/test/test_double_init.1.json
@@ -4,28 +4,7 @@
"nonce": 0
},
"auth": [
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[]
],
"ledger": {
@@ -38,39 +17,6 @@
"min_temp_entry_ttl": 16,
"max_entry_ttl": 6312000,
"ledger_entries": [
- [
- {
- "contract_data": {
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- "key": {
- "ledger_key_nonce": {
- "nonce": 801925984706572462
- }
- },
- "durability": "temporary"
- }
- },
- [
- {
- "last_modified_ledger_seq": 0,
- "data": {
- "contract_data": {
- "ext": "v0",
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- "key": {
- "ledger_key_nonce": {
- "nonce": 801925984706572462
- }
- },
- "durability": "temporary",
- "val": "void"
- }
- },
- "ext": "v0"
- },
- 6311999
- ]
- ],
[
{
"contract_data": {
@@ -98,29 +44,24 @@
"key": {
"vec": [
{
- "symbol": "Config"
+ "symbol": "Admin"
}
]
},
"val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
{
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
+ "symbol": "AgentJudge"
}
]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
]
@@ -130,7 +71,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -151,7 +92,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
]
]
@@ -190,69 +131,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000003",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Initialized"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -316,16 +194,21 @@
"v0": {
"topics": [
{
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize"
+ "symbol": "log"
}
],
"data": {
- "error": {
- "contract": 1
- }
+ "vec": [
+ {
+ "string": "caught panic 'already initialized' from contract function 'Symbol(obj#23)'"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
}
}
}
@@ -345,12 +228,12 @@
},
{
"error": {
- "contract": 1
+ "wasm_vm": "invalid_action"
}
}
],
"data": {
- "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ "string": "caught error from function"
}
}
}
@@ -370,7 +253,7 @@
},
{
"error": {
- "contract": 1
+ "wasm_vm": "invalid_action"
}
}
],
@@ -412,7 +295,7 @@
},
{
"error": {
- "contract": 1
+ "wasm_vm": "invalid_action"
}
}
],
diff --git a/contracts/escrow/test_snapshots/test/test_double_release_milestone_is_blocked.1.json b/contracts/escrow/test_snapshots/test/test_double_release_milestone_is_blocked.1.json
index 4caac09d..3f9763ad 100644
--- a/contracts/escrow/test_snapshots/test/test_double_release_milestone_is_blocked.1.json
+++ b/contracts/escrow/test_snapshots/test/test_double_release_milestone_is_blocked.1.json
@@ -542,6 +542,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json b/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json
index 7b71015d..54f3b90a 100644
--- a/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json
+++ b/contracts/escrow/test_snapshots/test/test_exhaustive_release_funds_path.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -426,39 +405,6 @@
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": {
@@ -531,7 +477,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 1194852393571756375
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -546,7 +492,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 1194852393571756375
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -564,7 +510,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 1301173170172112462
+ "nonce": 1194852393571756375
}
},
"durability": "temporary"
@@ -579,7 +525,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 1301173170172112462
+ "nonce": 1194852393571756375
}
},
"durability": "temporary",
@@ -875,14 +821,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -901,119 +839,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 4
}
},
{
@@ -1027,14 +856,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -1055,14 +876,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
@@ -1080,82 +893,23 @@
},
"ext": "v0"
},
- 150000
+ 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": "Config"
- }
- ]
- },
- "val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
- {
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- }
- ]
- }
- }
- ]
- }
- }
- }
- },
- "ext": "v0"
- },
- 150000
- ]
- ],
- [
- {
- "contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 0
}
]
},
@@ -1168,14 +922,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 0
}
]
},
@@ -1189,24 +946,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 90000
+ "lo": 2500
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1215,20 +968,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -1241,14 +997,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -1262,24 +1021,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 10000
+ "lo": 2500
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1288,20 +1043,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -1314,14 +1072,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -1335,24 +1096,95 @@
"val": {
"i128": {
"hi": 0,
- "lo": 0
+ "lo": 2500
}
}
},
{
"key": {
- "symbol": "authorized"
+ "symbol": "status"
},
"val": {
- "bool": true
- }
- },
- {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 3
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 3
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
"key": {
- "symbol": "clawback"
+ "symbol": "amount"
},
"val": {
- "bool": false
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1361,13 +1193,13 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": "ledger_key_contract_instance",
"durability": "persistent"
}
@@ -1378,46 +1210,15 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": "ledger_key_contract_instance",
"durability": "persistent",
"val": {
"contract_instance": {
- "executable": "stellar_asset",
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
"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": [
@@ -1434,36 +1235,12 @@
"key": {
"vec": [
{
- "symbol": "AssetInfo"
+ "symbol": "AgentJudge"
}
]
},
"val": {
- "vec": [
- {
- "symbol": "AlphaNum4"
- },
- {
- "map": [
- {
- "key": {
- "symbol": "asset_code"
- },
- "val": {
- "string": "aaa\\0"
- }
- },
- {
- "key": {
- "symbol": "issuer"
- },
- "val": {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000005"
- }
- }
- ]
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
]
@@ -1473,242 +1250,364 @@
},
"ext": "v0"
},
- 120960
+ 4095
]
],
[
{
- "contract_code": {
- "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
}
},
[
{
"last_modified_ledger_seq": 0,
"data": {
- "contract_code": {
+ "contract_data": {
"ext": "v0",
- "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "code": ""
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
}
},
"ext": "v0"
},
- 150000
+ 518400
]
- ]
- ]
- },
- "events": [
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "init_asset"
- }
- ],
- "data": {
- "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
- }
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
}
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "init_asset"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "set_admin"
- }
- ],
- "data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "set_admin"
- },
- {
- "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- }
- ],
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
"data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "set_admin"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "mint"
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "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
+ }
+ }
+ ]
+ }
}
- ],
- "data": {
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
"vec": [
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "symbol": "Balance"
},
{
- "i128": {
- "hi": 0,
- "lo": 100000
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
}
]
- }
+ },
+ "durability": "persistent"
}
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "mint"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- }
- ],
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
"data": {
- "i128": {
- "hi": 0,
- "lo": 100000
+ "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"
}
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "mint"
+ },
+ [
+ {
+ "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"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
}
- ],
- "data": "void"
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
- }
- },
- "failed_call": false
- },
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
{
"event": {
"ext": "v0",
@@ -1721,84 +1620,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
- },
- {
- "symbol": "initialize"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "string": "Initialized"
+ "symbol": "init_asset"
}
],
"data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
}
}
}
@@ -1808,7 +1637,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -1817,7 +1646,7 @@
"symbol": "fn_return"
},
{
- "symbol": "initialize"
+ "symbol": "init_asset"
}
],
"data": "void"
@@ -1838,27 +1667,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "create_job"
+ "symbol": "set_admin"
}
],
"data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -1868,30 +1684,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -1901,7 +1710,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -1910,7 +1719,7 @@
"symbol": "fn_return"
},
{
- "symbol": "create_job"
+ "symbol": "set_admin"
}
],
"data": "void"
@@ -1931,21 +1740,21 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "add_milestone"
+ "symbol": "mint"
}
],
"data": {
"vec": [
{
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
"i128": {
"hi": 0,
- "lo": 2500
+ "lo": 100000
}
}
]
@@ -1958,30 +1767,29 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
}
}
}
@@ -1991,7 +1799,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -2000,7 +1808,7 @@
"symbol": "fn_return"
},
{
- "symbol": "add_milestone"
+ "symbol": "mint"
}
],
"data": "void"
@@ -2024,19 +1832,16 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "add_milestone"
+ "symbol": "initialize"
}
],
"data": {
"vec": [
{
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
},
{
- "i128": {
- "hi": 0,
- "lo": 2500
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
]
}
@@ -2054,22 +1859,49 @@
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
}
],
"data": {
"vec": [
{
- "string": "add_milestone: job {} amount {}"
+ "u64": 1
},
{
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "i128": {
- "hi": 0,
- "lo": 2500
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
]
}
@@ -2090,7 +1922,7 @@
"symbol": "fn_return"
},
{
- "symbol": "add_milestone"
+ "symbol": "create_job"
}
],
"data": "void"
@@ -2135,39 +1967,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2234,14 +2033,38 @@
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
}
],
"data": {
"vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
{
"u64": 1
},
@@ -2294,7 +2117,7 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "deposit"
+ "symbol": "add_milestone"
}
],
"data": {
@@ -2305,7 +2128,7 @@
{
"i128": {
"hi": 0,
- "lo": 10000
+ "lo": 2500
}
}
]
@@ -2324,13 +2147,10 @@
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "fn_return"
},
{
- "symbol": "decimals"
+ "symbol": "add_milestone"
}
],
"data": "void"
@@ -2342,20 +2162,33 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "decimals"
+ "symbol": "deposit"
}
],
"data": {
- "u32": 7
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
}
}
}
@@ -2416,71 +2249,17 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- }
- ],
- "data": {
- "i128": {
- "hi": 0,
- "lo": 10000
- }
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "transfer"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "string": "deposit: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 10000
- }
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
}
}
}
@@ -2490,49 +2269,19 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "string": "escrow"
+ "symbol": "fn_return"
},
{
- "string": "Deposit"
+ "symbol": "transfer"
}
],
- "data": {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 10000
- }
- }
- },
- {
- "key": {
- "symbol": "deposited_at"
- },
- "val": {
- "u64": 0
- }
- },
- {
- "key": {
- "symbol": "job_id"
- },
- "val": {
- "u64": 1
- }
- }
- ]
- }
+ "data": "void"
}
}
},
@@ -2739,39 +2488,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_funds: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2973,39 +2689,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_funds: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3207,39 +2890,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_funds: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3441,39 +3091,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_funds: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3554,14 +3171,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -3580,119 +3189,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 4
}
},
{
@@ -3706,14 +3206,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -3734,14 +3226,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
diff --git a/contracts/escrow/test_snapshots/test/test_expire_dispute_refunds_client_after_deadline.1.json b/contracts/escrow/test_snapshots/test/test_expire_dispute_refunds_client_after_deadline.1.json
index f078b9d9..f25ea840 100644
--- a/contracts/escrow/test_snapshots/test/test_expire_dispute_refunds_client_after_deadline.1.json
+++ b/contracts/escrow/test_snapshots/test/test_expire_dispute_refunds_client_after_deadline.1.json
@@ -596,6 +596,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -2318,6 +2326,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_get_escrow_balance_decreases_on_release.1.json b/contracts/escrow/test_snapshots/test/test_get_escrow_balance_decreases_on_release.1.json
new file mode 100644
index 00000000..a9920b57
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_get_escrow_balance_decreases_on_release.1.json
@@ -0,0 +1,2698 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestone_count"
+ },
+ "val": {
+ "u32": 3
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "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"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "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"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 2
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 2
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AgentJudge"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "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": "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": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 8000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_get_multisig_config.1.json b/contracts/escrow/test_snapshots/test/test_get_multisig_config.1.json
index df83da1e..84f803a7 100644
--- a/contracts/escrow/test_snapshots/test/test_get_multisig_config.1.json
+++ b/contracts/escrow/test_snapshots/test/test_get_multisig_config.1.json
@@ -412,6 +412,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json b/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json
index e2688cf9..5bb1d9fd 100644
--- a/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json
+++ b/contracts/escrow/test_snapshots/test/test_happy_path_lifecycle.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -366,39 +345,6 @@
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": {
@@ -438,7 +384,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 115220454072064130
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -453,7 +399,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 115220454072064130
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -749,14 +695,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -775,92 +713,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 3
}
},
{
@@ -874,14 +730,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -902,14 +750,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
@@ -927,82 +767,23 @@
},
"ext": "v0"
},
- 150000
+ 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": "Config"
- }
- ]
- },
- "val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
- {
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- }
- ]
- }
- }
- ]
- }
- }
- }
- },
- "ext": "v0"
- },
- 150000
- ]
- ],
- [
- {
- "contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 0
}
]
},
@@ -1015,14 +796,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 0
}
]
},
@@ -1036,24 +820,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 91000
+ "lo": 3000
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1062,20 +842,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -1088,14 +871,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -1109,24 +895,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 9000
+ "lo": 3000
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1135,20 +917,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -1161,14 +946,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -1182,24 +970,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 0
+ "lo": 3000
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1208,13 +992,289 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "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": "AgentJudge"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 91000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "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": "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"
}
@@ -1336,137 +1396,17 @@
"contract_code": {
"ext": "v0",
"hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "code": ""
- }
- },
- "ext": "v0"
- },
- 150000
- ]
- ]
- ]
- },
- "events": [
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "init_asset"
- }
- ],
- "data": {
- "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "init_asset"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "set_admin"
- }
- ],
- "data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "set_admin"
- },
- {
- "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- }
- ],
- "data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "set_admin"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
{
"event": {
"ext": "v0",
@@ -1482,53 +1422,11 @@
"bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "mint"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "i128": {
- "hi": 0,
- "lo": 100000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "mint"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ "symbol": "init_asset"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 100000
- }
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
}
}
}
@@ -1547,7 +1445,7 @@
"symbol": "fn_return"
},
{
- "symbol": "mint"
+ "symbol": "init_asset"
}
],
"data": "void"
@@ -1568,51 +1466,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "initialize"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
+ "symbol": "set_admin"
}
],
"data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -1622,30 +1483,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "contract",
"body": {
"v0": {
"topics": [
{
- "string": "escrow"
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
},
{
- "string": "Initialized"
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -1655,7 +1509,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -1664,7 +1518,7 @@
"symbol": "fn_return"
},
{
- "symbol": "initialize"
+ "symbol": "set_admin"
}
],
"data": "void"
@@ -1685,25 +1539,22 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "create_job"
+ "symbol": "mint"
}
],
"data": {
"vec": [
- {
- "u64": 1
- },
{
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
}
]
}
@@ -1715,30 +1566,29 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
}
}
}
@@ -1748,7 +1598,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -1757,7 +1607,7 @@
"symbol": "fn_return"
},
{
- "symbol": "create_job"
+ "symbol": "mint"
}
],
"data": "void"
@@ -1781,52 +1631,16 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "add_milestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
+ "symbol": "initialize"
}
],
"data": {
"vec": [
{
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
},
{
- "i128": {
- "hi": 0,
- "lo": 3000
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
]
}
@@ -1842,51 +1656,15 @@
"type_": "diagnostic",
"body": {
"v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "add_milestone"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
- },
- {
- "symbol": "add_milestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
}
}
},
@@ -1895,28 +1673,34 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
}
],
"data": {
"vec": [
{
- "string": "add_milestone: job {} amount {}"
+ "u64": 1
},
{
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "i128": {
- "hi": 0,
- "lo": 3000
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
]
}
@@ -1937,7 +1721,7 @@
"symbol": "fn_return"
},
{
- "symbol": "add_milestone"
+ "symbol": "create_job"
}
],
"data": "void"
@@ -1991,14 +1775,38 @@
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
}
],
"data": {
"vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
{
"u64": 1
},
@@ -2051,7 +1859,7 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "deposit"
+ "symbol": "add_milestone"
}
],
"data": {
@@ -2062,7 +1870,7 @@
{
"i128": {
"hi": 0,
- "lo": 9000
+ "lo": 3000
}
}
]
@@ -2081,13 +1889,10 @@
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "fn_return"
},
{
- "symbol": "decimals"
+ "symbol": "add_milestone"
}
],
"data": "void"
@@ -2099,20 +1904,33 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "decimals"
+ "symbol": "deposit"
}
],
"data": {
- "u32": 7
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 9000
+ }
+ }
+ ]
}
}
}
@@ -2211,90 +2029,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "deposit: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 9000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Deposit"
- }
- ],
- "data": {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 9000
- }
- }
- },
- {
- "key": {
- "symbol": "deposited_at"
- },
- "val": {
- "u64": 0
- }
- },
- {
- "key": {
- "symbol": "job_id"
- },
- "val": {
- "u64": 1
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2411,107 +2145,21 @@
"topics": [
{
"symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "transfer"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "transfer"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- }
- ],
- "data": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "transfer"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
{
- "symbol": "log"
+ "symbol": "transfer"
}
],
"data": {
"vec": [
{
- "string": "release_milestone: job {} amount {}"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
},
{
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
},
{
"i128": {
@@ -2529,42 +2177,56 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "contract",
"body": {
"v0": {
"topics": [
{
- "string": "escrow"
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
},
{
- "string": "ReleaseMilestone"
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- },
- {
- "u64": 0
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
}
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2763,78 +2425,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "ReleaseMilestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "u32": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3033,78 +2623,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "ReleaseMilestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3185,14 +2703,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -3211,92 +2721,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 3
}
},
{
@@ -3310,14 +2738,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -3338,14 +2758,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
diff --git a/contracts/escrow/test_snapshots/test/test_multiple_jobs_isolated.1.json b/contracts/escrow/test_snapshots/test/test_multiple_jobs_isolated.1.json
new file mode 100644
index 00000000..57f9d0a6
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_multiple_jobs_isolated.1.json
@@ -0,0 +1,3977 @@
+{
+ "generators": {
+ "address": 8,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 2
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1500
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 2
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 2
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ [],
+ [],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "function_name": "release_funds",
+ "args": [
+ {
+ "u64": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ [],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 801925984706572462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 3126073502131104533
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 3126073502131104533
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1301173170172112462
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1301173170172112462
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestone_count"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "WorkInProgress"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 2
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 2
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestone_count"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "WorkInProgress"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 2
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 2
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 2
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 2
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
+ "storage": [
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AgentJudge"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 96000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ ]
+ },
+ "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": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "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": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "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": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 2
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1500
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 2
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 2
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 2
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 2
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "u64": 2
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_escrow_balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1500
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 2
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000008"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 2
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000008",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_milestone"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_open_dispute_by_rando_panics.1.json b/contracts/escrow/test_snapshots/test/test_open_dispute_by_rando_panics.1.json
index 974d50cd..c3c08301 100644
--- a/contracts/escrow/test_snapshots/test/test_open_dispute_by_rando_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_open_dispute_by_rando_panics.1.json
@@ -487,6 +487,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_open_dispute_on_completed_panics.1.json b/contracts/escrow/test_snapshots/test/test_open_dispute_on_completed_panics.1.json
index 176c7f51..adb49061 100644
--- a/contracts/escrow/test_snapshots/test/test_open_dispute_on_completed_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_open_dispute_on_completed_panics.1.json
@@ -542,6 +542,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_blocks_release_funds.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_blocks_release_funds.1.json
index e9395dda..909638ad 100644
--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_blocks_release_funds.1.json
+++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_blocks_release_funds.1.json
@@ -714,6 +714,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -2730,6 +2738,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json
index 2b2c7bbf..9fc30456 100644
--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json
+++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_client_locks_funds.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -323,7 +302,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
"key": {
"ledger_key_nonce": {
- "nonce": 1033654523790656264
+ "nonce": 5541220902715666415
}
},
"durability": "temporary"
@@ -338,7 +317,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
"key": {
"ledger_key_nonce": {
- "nonce": 1033654523790656264
+ "nonce": 5541220902715666415
}
},
"durability": "temporary",
@@ -353,10 +332,10 @@
[
{
"contract_data": {
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 5541220902715666415
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -368,10 +347,10 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 5541220902715666415
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -482,39 +461,6 @@
6311999
]
],
- [
- {
- "contract_data": {
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
- "key": {
- "ledger_key_nonce": {
- "nonce": 5806905060045992000
- }
- },
- "durability": "temporary"
- }
- },
- [
- {
- "last_modified_ledger_seq": 0,
- "data": {
- "contract_data": {
- "ext": "v0",
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
- "key": {
- "ledger_key_nonce": {
- "nonce": 5806905060045992000
- }
- },
- "durability": "temporary",
- "val": "void"
- }
- },
- "ext": "v0"
- },
- 6311999
- ]
- ],
[
{
"contract_data": {
@@ -634,14 +580,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 604800
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -660,92 +598,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 3
}
},
{
@@ -759,14 +615,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -787,14 +635,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
@@ -812,14 +652,26 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
{
"contract_data": {
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "key": "ledger_key_contract_instance",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
"durability": "persistent"
}
},
@@ -830,64 +682,68 @@
"contract_data": {
"ext": "v0",
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "key": "ledger_key_contract_instance",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
"durability": "persistent",
"val": {
- "contract_instance": {
- "executable": {
- "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
- },
- "storage": [
- {
- "key": {
- "vec": [
- {
- "symbol": "Config"
- }
- ]
- },
- "val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
- {
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- }
- ]
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
}
}
- ]
- }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
}
}
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -900,14 +756,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -921,24 +780,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 91000
+ "lo": 3000
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
}
}
]
@@ -947,20 +802,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -973,14 +831,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -994,24 +855,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 9000
+ "lo": 3000
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
}
}
]
@@ -1020,13 +877,13 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": "ledger_key_contract_instance",
"durability": "persistent"
}
@@ -1037,16 +894,219 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": "ledger_key_contract_instance",
"durability": "persistent",
"val": {
"contract_instance": {
- "executable": "stellar_asset",
+ "executable": {
+ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ },
"storage": [
{
"key": {
- "symbol": "METADATA"
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AgentJudge"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 91000
+ }
+ }
+ },
+ {
+ "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": 9000
+ }
+ }
+ },
+ {
+ "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": [
@@ -1153,7 +1213,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
]
]
@@ -1401,69 +1461,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Initialized"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1524,219 +1521,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "create_job"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
- },
- {
- "symbol": "add_milestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "add_milestone"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
- },
- {
- "symbol": "add_milestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1749,7 +1533,7 @@
"symbol": "fn_return"
},
{
- "symbol": "add_milestone"
+ "symbol": "create_job"
}
],
"data": "void"
@@ -1803,14 +1587,38 @@
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
}
],
"data": {
"vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
{
"u64": 1
},
@@ -1863,7 +1671,7 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "deposit"
+ "symbol": "add_milestone"
}
],
"data": {
@@ -1874,7 +1682,7 @@
{
"i128": {
"hi": 0,
- "lo": 9000
+ "lo": 3000
}
}
]
@@ -1893,13 +1701,10 @@
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "fn_return"
},
{
- "symbol": "decimals"
+ "symbol": "add_milestone"
}
],
"data": "void"
@@ -1911,20 +1716,33 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "decimals"
+ "symbol": "deposit"
}
],
"data": {
- "u32": 7
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 9000
+ }
+ }
+ ]
}
}
}
@@ -2023,90 +1841,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "deposit: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 9000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Deposit"
- }
- ],
- "data": {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 9000
- }
- }
- },
- {
- "key": {
- "symbol": "deposited_at"
- },
- "val": {
- "u64": 0
- }
- },
- {
- "key": {
- "symbol": "job_id"
- },
- "val": {
- "u64": 1
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2161,33 +1895,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "raise_dispute: job {}"
- },
- {
- "u64": 1
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2204,21 +1911,46 @@
}
],
"data": {
- "vec": [
+ "map": [
{
- "u64": 1
+ "key": {
+ "symbol": "initiator"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
},
{
- "u32": 0
+ "key": {
+ "symbol": "milestones_released"
+ },
+ "val": {
+ "u32": 0
+ }
},
{
- "u32": 3
+ "key": {
+ "symbol": "milestones_total"
+ },
+ "val": {
+ "u32": 3
+ }
},
{
- "u64": 0
+ "key": {
+ "symbol": "raised_at"
+ },
+ "val": {
+ "u64": 0
+ }
}
]
}
@@ -2307,14 +2039,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 604800
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -2333,92 +2057,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 3
}
},
{
@@ -2432,14 +2074,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -2460,14 +2094,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_freelancer_locks_funds.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_freelancer_locks_funds.1.json
index 465ee60f..6a2afdad 100644
--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_freelancer_locks_funds.1.json
+++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_freelancer_locks_funds.1.json
@@ -600,6 +600,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -2156,6 +2164,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_third_party_panics.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_third_party_panics.1.json
index bc48bbfa..59310789 100644
--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_by_third_party_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_by_third_party_panics.1.json
@@ -487,6 +487,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_raise_dispute_on_completed_job_panics.1.json b/contracts/escrow/test_snapshots/test/test_raise_dispute_on_completed_job_panics.1.json
index 02394618..f0879f39 100644
--- a/contracts/escrow/test_snapshots/test/test_raise_dispute_on_completed_job_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_raise_dispute_on_completed_job_panics.1.json
@@ -542,6 +542,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_reentrancy_protection_panics_on_recursive_release.1.json b/contracts/escrow/test_snapshots/test/test_reentrancy_protection_panics_on_recursive_release.1.json
new file mode 100644
index 00000000..4808f20d
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_reentrancy_protection_panics_on_recursive_release.1.json
@@ -0,0 +1,2231 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestone_count"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AgentJudge"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "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": "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": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestone_count"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "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/escrow/test_snapshots/test/test_reentrancy_protection_release_funds_blocked.1.json b/contracts/escrow/test_snapshots/test/test_reentrancy_protection_release_funds_blocked.1.json
new file mode 100644
index 00000000..fbcd56f1
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_reentrancy_protection_release_funds_blocked.1.json
@@ -0,0 +1,2237 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_funds",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestone_count"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AgentJudge"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "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": "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": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestone_count"
+ },
+ "val": {
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "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/escrow/test_snapshots/test/test_reentrant_refund_panics.1.json b/contracts/escrow/test_snapshots/test/test_reentrant_refund_panics.1.json
index 5091a195..2631a7f3 100644
--- a/contracts/escrow/test_snapshots/test/test_reentrant_refund_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_reentrant_refund_panics.1.json
@@ -488,6 +488,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_reentrant_release_funds_panics.1.json b/contracts/escrow/test_snapshots/test/test_reentrant_release_funds_panics.1.json
index 11e51220..ca90d88a 100644
--- a/contracts/escrow/test_snapshots/test/test_reentrant_release_funds_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_reentrant_release_funds_panics.1.json
@@ -488,6 +488,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_reentrant_release_milestone_panics.1.json b/contracts/escrow/test_snapshots/test/test_reentrant_release_milestone_panics.1.json
index 2d015063..e4a83e4e 100644
--- a/contracts/escrow/test_snapshots/test/test_reentrant_release_milestone_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_reentrant_release_milestone_panics.1.json
@@ -488,6 +488,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_refund.1.json b/contracts/escrow/test_snapshots/test/test_refund.1.json
index d29e0184..c4e66ec6 100644
--- a/contracts/escrow/test_snapshots/test/test_refund.1.json
+++ b/contracts/escrow/test_snapshots/test/test_refund.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -198,7 +177,6 @@
]
],
[],
- [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -227,7 +205,7 @@
"ledger": {
"protocol_version": 21,
"sequence_number": 0,
- "timestamp": 2592001,
+ "timestamp": 0,
"network_id": "0000000000000000000000000000000000000000000000000000000000000000",
"base_reserve": 0,
"min_persistent_entry_ttl": 4096,
@@ -301,7 +279,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
"key": {
"ledger_key_nonce": {
- "nonce": 1033654523790656264
+ "nonce": 5541220902715666415
}
},
"durability": "temporary"
@@ -316,7 +294,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
"key": {
"ledger_key_nonce": {
- "nonce": 1033654523790656264
+ "nonce": 5541220902715666415
}
},
"durability": "temporary",
@@ -331,10 +309,10 @@
[
{
"contract_data": {
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 5541220902715666415
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -346,10 +324,10 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 5541220902715666415
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -460,39 +438,6 @@
6311999
]
],
- [
- {
- "contract_data": {
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
- "key": {
- "ledger_key_nonce": {
- "nonce": 6277191135259896685
- }
- },
- "durability": "temporary"
- }
- },
- [
- {
- "last_modified_ledger_seq": 0,
- "data": {
- "contract_data": {
- "ext": "v0",
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
- "key": {
- "ledger_key_nonce": {
- "nonce": 6277191135259896685
- }
- },
- "durability": "temporary",
- "val": "void"
- }
- },
- "ext": "v0"
- },
- 6311999
- ]
- ],
[
{
"contract_data": {
@@ -581,94 +526,62 @@
},
{
"key": {
- "symbol": "dispute_deadline"
+ "symbol": "expires_at"
},
"val": {
- "u64": 0
+ "u64": 2592000
}
},
{
"key": {
- "symbol": "expires_at"
+ "symbol": "freelancer"
},
"val": {
- "u64": 2592000
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
{
"key": {
- "symbol": "freelancer"
+ "symbol": "milestone_count"
},
"val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u32": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
}
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "status"
},
"val": {
"vec": [
{
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
+ "symbol": "Refunded"
}
]
}
},
{
"key": {
- "symbol": "released_amount"
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
},
"val": {
"i128": {
@@ -676,13 +589,68 @@
"lo": 5000
}
}
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
},
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
{
"key": {
- "symbol": "requires_multisig"
+ "symbol": "amount"
},
"val": {
- "bool": false
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
}
},
{
@@ -692,36 +660,84 @@
"val": {
"vec": [
{
- "symbol": "Refunded"
+ "symbol": "Pending"
}
]
}
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
},
{
- "key": {
- "symbol": "token"
- },
- "val": {
- "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
- }
+ "u64": 1
},
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
{
"key": {
- "symbol": "token_decimals"
+ "symbol": "amount"
},
"val": {
- "u32": 7
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
}
},
{
"key": {
- "symbol": "total_amount"
+ "symbol": "status"
},
"val": {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
}
}
]
@@ -730,7 +746,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -760,29 +776,24 @@
"key": {
"vec": [
{
- "symbol": "Config"
+ "symbol": "Admin"
}
]
},
"val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
{
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
+ "symbol": "AgentJudge"
}
]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
]
@@ -792,7 +803,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -1071,7 +1082,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
]
]
@@ -1328,73 +1339,10 @@
"v0": {
"topics": [
{
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Initialized"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize"
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
}
],
"data": "void"
@@ -1442,39 +1390,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1532,39 +1447,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1622,39 +1504,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1712,53 +1561,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "decimals"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "decimals"
- }
- ],
- "data": {
- "u32": 7
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1851,90 +1653,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "deposit: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Deposit"
- }
- ],
- "data": {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
- }
- },
- {
- "key": {
- "symbol": "deposited_at"
- },
- "val": {
- "u64": 0
- }
- },
- {
- "key": {
- "symbol": "job_id"
- },
- "val": {
- "u64": 1
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2008,55 +1726,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
- },
- {
- "symbol": "get_expiry"
- }
- ],
- "data": {
- "u64": 1
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "get_expiry"
- }
- ],
- "data": {
- "u64": 2592000
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2182,78 +1851,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "refund: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Refunded"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
- },
- {
- "u64": 2592001
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2334,14 +1931,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -2360,65 +1949,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 2
}
},
{
@@ -2432,14 +1966,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -2460,14 +1986,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
diff --git a/contracts/escrow/test_snapshots/test/test_refund_by_non_client_panics.1.json b/contracts/escrow/test_snapshots/test/test_refund_by_non_client_panics.1.json
index e7a1d3e3..ee892b26 100644
--- a/contracts/escrow/test_snapshots/test/test_refund_by_non_client_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_refund_by_non_client_panics.1.json
@@ -487,6 +487,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_refund_reentrant_lock_panics.1.json b/contracts/escrow/test_snapshots/test/test_refund_reentrant_lock_panics.1.json
new file mode 100644
index 00000000..66da6acc
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_refund_reentrant_lock_panics.1.json
@@ -0,0 +1,1931 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Funded"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "JobLock"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "JobLock"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "refund"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "refund"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 23
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 23
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 23
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "refund"
+ },
+ {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 23
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics.1.json
index 60a89b4d..047ba501 100644
--- a/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics.1.json
@@ -487,6 +487,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics_2.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics_2.1.json
new file mode 100644
index 00000000..b3a468a8
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_release_funds_invalid_index_panics_2.1.json
@@ -0,0 +1,1903 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Funded"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95000
+ }
+ }
+ },
+ {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 6
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 6
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 6
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "resolve_dispute"
+ },
+ {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 6
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_out_of_order.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_out_of_order.1.json
new file mode 100644
index 00000000..416c4fca
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_release_funds_out_of_order.1.json
@@ -0,0 +1,3283 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_funds",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_funds",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_funds",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 94000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "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": {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "release_funds: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "release_funds: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "release_funds: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Completed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 6000
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_reentrant_lock_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_reentrant_lock_panics.1.json
new file mode 100644
index 00000000..890f4bad
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_release_funds_reentrant_lock_panics.1.json
@@ -0,0 +1,1945 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Funded"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "JobLock"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "JobLock"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_funds"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "caught panic 'reentrant job operation: ReentrantCall' from contract function 'Symbol(obj#485)'"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "caught error from function"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "release_funds"
+ },
+ {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 0
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_release_funds_twice_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_funds_twice_panics.1.json
index d39dda53..096541a1 100644
--- a/contracts/escrow/test_snapshots/test/test_release_funds_twice_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_release_funds_twice_panics.1.json
@@ -545,6 +545,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_no_pending_milestones.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_no_pending_milestones.1.json
index 4caac09d..3f9763ad 100644
--- a/contracts/escrow/test_snapshots/test/test_release_milestone_no_pending_milestones.1.json
+++ b/contracts/escrow/test_snapshots/test/test_release_milestone_no_pending_milestones.1.json
@@ -542,6 +542,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_overflow_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_overflow_panics.1.json
index 4caac09d..3f9763ad 100644
--- a/contracts/escrow/test_snapshots/test/test_release_milestone_overflow_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_release_milestone_overflow_panics.1.json
@@ -542,6 +542,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_reentrancy_guard_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_reentrancy_guard_panics.1.json
index fed3fff3..5969560d 100644
--- a/contracts/escrow/test_snapshots/test/test_release_milestone_reentrancy_guard_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_release_milestone_reentrancy_guard_panics.1.json
@@ -488,6 +488,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_reentrant_lock_panics.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_reentrant_lock_panics.1.json
new file mode 100644
index 00000000..6f5da665
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_release_milestone_reentrant_lock_panics.1.json
@@ -0,0 +1,1931 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Funded"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "JobLock"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "JobLock"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 23
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 23
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 23
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "release_milestone"
+ },
+ {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 23
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_sequential_success.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_sequential_success.1.json
index 25f0d8e1..bd974d0e 100644
--- a/contracts/escrow/test_snapshots/test/test_release_milestone_sequential_success.1.json
+++ b/contracts/escrow/test_snapshots/test/test_release_milestone_sequential_success.1.json
@@ -773,6 +773,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -2617,6 +2625,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -3125,6 +3141,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -3633,6 +3657,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_release_milestone_unauthorized_freelancer.1.json b/contracts/escrow/test_snapshots/test/test_release_milestone_unauthorized_freelancer.1.json
index e3a21008..37f5a5b3 100644
--- a/contracts/escrow/test_snapshots/test/test_release_milestone_unauthorized_freelancer.1.json
+++ b/contracts/escrow/test_snapshots/test/test_release_milestone_unauthorized_freelancer.1.json
@@ -487,6 +487,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_released_amount_matches_transferred_on_sequential_release.1.json b/contracts/escrow/test_snapshots/test/test_released_amount_matches_transferred_on_sequential_release.1.json
index 730b3442..2b0ec3d7 100644
--- a/contracts/escrow/test_snapshots/test/test_released_amount_matches_transferred_on_sequential_release.1.json
+++ b/contracts/escrow/test_snapshots/test/test_released_amount_matches_transferred_on_sequential_release.1.json
@@ -773,6 +773,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -2617,6 +2625,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -3125,6 +3141,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -3633,6 +3657,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_resolve_after_deadline_fails.1.json b/contracts/escrow/test_snapshots/test/test_resolve_after_deadline_fails.1.json
index 4cecc2e2..0b2dc9f7 100644
--- a/contracts/escrow/test_snapshots/test/test_resolve_after_deadline_fails.1.json
+++ b/contracts/escrow/test_snapshots/test/test_resolve_after_deadline_fails.1.json
@@ -542,6 +542,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_resolve_before_deadline_succeeds.1.json b/contracts/escrow/test_snapshots/test/test_resolve_before_deadline_succeeds.1.json
index 939a0390..d391208a 100644
--- a/contracts/escrow/test_snapshots/test/test_resolve_before_deadline_succeeds.1.json
+++ b/contracts/escrow/test_snapshots/test/test_resolve_before_deadline_succeeds.1.json
@@ -606,6 +606,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -2312,6 +2320,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_payout_to_freelancer.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_payout_to_freelancer.1.json
index d406785e..3713cb34 100644
--- a/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_payout_to_freelancer.1.json
+++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_payout_to_freelancer.1.json
@@ -607,6 +607,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -2313,6 +2321,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_refund_to_client.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_refund_to_client.1.json
index eb3039a8..da8e9d89 100644
--- a/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_refund_to_client.1.json
+++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_full_refund_to_client.1.json
@@ -608,6 +608,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
@@ -2241,6 +2249,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_invalid_state_panics.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_invalid_state_panics.1.json
new file mode 100644
index 00000000..b3a468a8
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_invalid_state_panics.1.json
@@ -0,0 +1,1903 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Funded"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 95000
+ }
+ }
+ },
+ {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": {
+ "error": {
+ "contract": 6
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 6
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 6
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "resolve_dispute"
+ },
+ {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2500
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "contract": 6
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_panics.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_panics.1.json
new file mode 100644
index 00000000..ca3a44e3
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_panics.1.json
@@ -0,0 +1,3608 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "raise_dispute",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "resolve_dispute",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 604800
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Resolved"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 92100
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 7900
+ }
+ }
+ },
+ {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "release_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "ReleaseMilestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "raise_dispute"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "raise_dispute: job {}"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "DisputeRaised"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "raise_dispute"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 604800
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Disputed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "resolve_dispute: job {} payee {} payer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 604800
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Resolved"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 7900
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 92100
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_resolve_dispute_success.1.json b/contracts/escrow/test_snapshots/test/test_resolve_dispute_success.1.json
new file mode 100644
index 00000000..ca3a44e3
--- /dev/null
+++ b/contracts/escrow/test_snapshots/test/test_resolve_dispute_success.1.json
@@ -0,0 +1,3608 @@
+{
+ "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "initialize",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "create_job",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "add_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "deposit",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "release_milestone",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "raise_dispute",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "function_name": "resolve_dispute",
+ "args": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 115220454072064130
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1194852393571756375
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4837995959683129791
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5806905060045992000
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Job"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 604800
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Resolved"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "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": "Config"
+ }
+ ]
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "admin"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "agent_judge"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 150000
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 92100
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 7900
+ }
+ }
+ },
+ {
+ "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": "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"
+ },
+ 150000
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "Escrow initialized with admin: {} and agent_judge: {}"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Initialized"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "create_job: id {} client {} freelancer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "create_job"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "add_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "decimals"
+ }
+ ],
+ "data": {
+ "u32": 7
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "deposit: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "Deposit"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "deposited_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "job_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "deposit"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "release_milestone: job {} amount {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "ReleaseMilestone"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "release_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "raise_dispute"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "raise_dispute: job {}"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "string": "escrow"
+ },
+ {
+ "string": "DisputeRaised"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "u64": 0
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "raise_dispute"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 604800
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Disputed"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "resolve_dispute: job {} payee {} payer {}"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 4900
+ }
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 2100
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "resolve_dispute"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_job"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "client"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "dispute_deadline"
+ },
+ "val": {
+ "u64": 604800
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 2592000
+ }
+ },
+ {
+ "key": {
+ "symbol": "freelancer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "milestones"
+ },
+ "val": {
+ "vec": [
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 3000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 4000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "released_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "requires_multisig"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Resolved"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "token"
+ },
+ "val": {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ }
+ },
+ {
+ "key": {
+ "symbol": "token_decimals"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 7900
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 92100
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/escrow/test_snapshots/test/test_token_decimals_stored_on_deposit.1.json b/contracts/escrow/test_snapshots/test/test_token_decimals_stored_on_deposit.1.json
index a3e95034..036fca24 100644
--- a/contracts/escrow/test_snapshots/test/test_token_decimals_stored_on_deposit.1.json
+++ b/contracts/escrow/test_snapshots/test/test_token_decimals_stored_on_deposit.1.json
@@ -487,6 +487,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json b/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json
index c7d0397c..50d15040 100644
--- a/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json
+++ b/contracts/escrow/test_snapshots/test/test_unauthorized_release.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -276,7 +255,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
"key": {
"ledger_key_nonce": {
- "nonce": 1033654523790656264
+ "nonce": 5541220902715666415
}
},
"durability": "temporary"
@@ -291,7 +270,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
"key": {
"ledger_key_nonce": {
- "nonce": 1033654523790656264
+ "nonce": 5541220902715666415
}
},
"durability": "temporary",
@@ -306,10 +285,10 @@
[
{
"contract_data": {
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 5541220902715666415
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -321,10 +300,10 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 5541220902715666415
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -435,39 +414,6 @@
6311999
]
],
- [
- {
- "contract_data": {
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
- "key": {
- "ledger_key_nonce": {
- "nonce": 8370022561469687789
- }
- },
- "durability": "temporary"
- }
- },
- [
- {
- "last_modified_ledger_seq": 0,
- "data": {
- "contract_data": {
- "ext": "v0",
- "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
- "key": {
- "ledger_key_nonce": {
- "nonce": 8370022561469687789
- }
- },
- "durability": "temporary",
- "val": "void"
- }
- },
- "ext": "v0"
- },
- 6311999
- ]
- ],
[
{
"contract_data": {
@@ -521,14 +467,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -547,65 +485,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 500
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Pending"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 2
}
},
{
@@ -619,14 +502,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -649,22 +524,164 @@
},
{
"key": {
- "symbol": "token_decimals"
+ "symbol": "total_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 1000
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 0
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 500
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "status"
},
"val": {
- "u32": 7
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
}
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Milestone"
+ },
+ {
+ "u64": 1
},
+ {
+ "u32": 1
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
{
"key": {
- "symbol": "total_amount"
+ "symbol": "amount"
},
"val": {
"i128": {
"hi": 0,
- "lo": 1000
+ "lo": 500
}
}
+ },
+ {
+ "key": {
+ "symbol": "status"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Pending"
+ }
+ ]
+ }
}
]
}
@@ -672,7 +689,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -702,29 +719,24 @@
"key": {
"vec": [
{
- "symbol": "Config"
+ "symbol": "Admin"
}
]
},
"val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
{
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
+ "symbol": "AgentJudge"
}
]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
}
]
@@ -734,7 +746,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
],
[
@@ -1013,7 +1025,7 @@
},
"ext": "v0"
},
- 150000
+ 4095
]
]
]
@@ -1270,73 +1282,10 @@
"v0": {
"topics": [
{
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Initialized"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "initialize"
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "initialize"
}
],
"data": "void"
@@ -1384,39 +1333,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1474,39 +1390,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1564,39 +1447,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 500
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1654,53 +1504,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
- },
- {
- "symbol": "decimals"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "decimals"
- }
- ],
- "data": {
- "u32": 7
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1793,90 +1596,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "deposit: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 1000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000007",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Deposit"
- }
- ],
- "data": {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 1000
- }
- }
- },
- {
- "key": {
- "symbol": "deposited_at"
- },
- "val": {
- "u64": 0
- }
- },
- {
- "key": {
- "symbol": "job_id"
- },
- "val": {
- "u64": 1
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -1940,16 +1659,21 @@
"v0": {
"topics": [
{
- "symbol": "fn_return"
- },
- {
- "symbol": "release_milestone"
+ "symbol": "log"
}
],
"data": {
- "error": {
- "contract": 3
- }
+ "vec": [
+ {
+ "string": "caught panic 'only client can release' from contract function 'Symbol(obj#439)'"
+ },
+ {
+ "u64": 1
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
}
}
}
@@ -1969,12 +1693,12 @@
},
{
"error": {
- "contract": 3
+ "wasm_vm": "invalid_action"
}
}
],
"data": {
- "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err"
+ "string": "caught error from function"
}
}
}
@@ -1994,7 +1718,7 @@
},
{
"error": {
- "contract": 3
+ "wasm_vm": "invalid_action"
}
}
],
@@ -2036,7 +1760,7 @@
},
{
"error": {
- "contract": 3
+ "wasm_vm": "invalid_action"
}
}
],
diff --git a/contracts/escrow/test_snapshots/test/test_unauthorized_release_funds_by_freelancer_panics.1.json b/contracts/escrow/test_snapshots/test/test_unauthorized_release_funds_by_freelancer_panics.1.json
index 91eafa24..7f41d1a6 100644
--- a/contracts/escrow/test_snapshots/test/test_unauthorized_release_funds_by_freelancer_panics.1.json
+++ b/contracts/escrow/test_snapshots/test/test_unauthorized_release_funds_by_freelancer_panics.1.json
@@ -487,6 +487,14 @@
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
}
},
+ {
+ "key": {
+ "symbol": "funded_ledger_seq"
+ },
+ "val": {
+ "u32": 0
+ }
+ },
{
"key": {
"symbol": "milestones"
diff --git a/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json b/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json
index de7b545c..51dc9cda 100644
--- a/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json
+++ b/contracts/escrow/test_snapshots/test/test_variable_milestone_amounts.1.json
@@ -48,28 +48,7 @@
}
]
],
- [
- [
- "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
- {
- "function": {
- "contract_fn": {
- "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
- "function_name": "initialize",
- "args": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- },
- "sub_invocations": []
- }
- ]
- ],
+ [],
[
[
"CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
@@ -366,39 +345,6 @@
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": {
@@ -438,7 +384,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 115220454072064130
+ "nonce": 1033654523790656264
}
},
"durability": "temporary"
@@ -453,7 +399,7 @@
"contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
"key": {
"ledger_key_nonce": {
- "nonce": 115220454072064130
+ "nonce": 1033654523790656264
}
},
"durability": "temporary",
@@ -749,14 +695,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -775,92 +713,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 3
}
},
{
@@ -874,14 +730,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -902,14 +750,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"
@@ -927,82 +767,23 @@
},
"ext": "v0"
},
- 150000
+ 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": "Config"
- }
- ]
- },
- "val": {
- "map": [
- {
- "key": {
- "symbol": "admin"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- },
- {
- "key": {
- "symbol": "agent_judge"
- },
- "val": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- }
- ]
- }
- }
- ]
- }
- }
- }
- },
- "ext": "v0"
- },
- 150000
- ]
- ],
- [
- {
- "contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 0
}
]
},
@@ -1015,14 +796,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ "u64": 1
+ },
+ {
+ "u32": 0
}
]
},
@@ -1036,24 +820,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 90000
+ "lo": 2000
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1062,20 +842,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -1088,14 +871,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ "u64": 1
+ },
+ {
+ "u32": 1
}
]
},
@@ -1109,24 +895,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 10000
+ "lo": 3000
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1135,20 +917,23 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -1161,14 +946,17 @@
"data": {
"contract_data": {
"ext": "v0",
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
"key": {
"vec": [
{
- "symbol": "Balance"
+ "symbol": "Milestone"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ "u64": 1
+ },
+ {
+ "u32": 2
}
]
},
@@ -1182,24 +970,20 @@
"val": {
"i128": {
"hi": 0,
- "lo": 0
+ "lo": 5000
}
}
},
{
"key": {
- "symbol": "authorized"
- },
- "val": {
- "bool": true
- }
- },
- {
- "key": {
- "symbol": "clawback"
+ "symbol": "status"
},
"val": {
- "bool": false
+ "vec": [
+ {
+ "symbol": "Released"
+ }
+ ]
}
}
]
@@ -1208,13 +992,289 @@
},
"ext": "v0"
},
- 518400
+ 4095
]
],
[
{
"contract_data": {
- "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "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": "AgentJudge"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 90000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ "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"
}
@@ -1332,141 +1392,21 @@
[
{
"last_modified_ledger_seq": 0,
- "data": {
- "contract_code": {
- "ext": "v0",
- "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "code": ""
- }
- },
- "ext": "v0"
- },
- 150000
- ]
- ]
- ]
- },
- "events": [
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "init_asset"
- }
- ],
- "data": {
- "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "init_asset"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "set_admin"
- }
- ],
- "data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "set_admin"
- },
- {
- "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- }
- ],
- "data": {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "set_admin"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 4095
+ ]
+ ]
+ ]
+ },
+ "events": [
{
"event": {
"ext": "v0",
@@ -1482,53 +1422,11 @@
"bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "mint"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "i128": {
- "hi": 0,
- "lo": 100000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "mint"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
+ "symbol": "init_asset"
}
],
"data": {
- "i128": {
- "hi": 0,
- "lo": 100000
- }
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000005"
}
}
}
@@ -1547,7 +1445,7 @@
"symbol": "fn_return"
},
{
- "symbol": "mint"
+ "symbol": "init_asset"
}
],
"data": "void"
@@ -1568,51 +1466,14 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "initialize"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
+ "symbol": "set_admin"
}
],
"data": {
- "vec": [
- {
- "string": "Escrow initialized with admin: {} and agent_judge: {}"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -1622,30 +1483,23 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "contract",
"body": {
"v0": {
"topics": [
{
- "string": "escrow"
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
},
{
- "string": "Initialized"
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
- },
- {
- "u64": 0
- }
- ]
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
}
}
}
@@ -1655,7 +1509,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -1664,7 +1518,7 @@
"symbol": "fn_return"
},
{
- "symbol": "initialize"
+ "symbol": "set_admin"
}
],
"data": "void"
@@ -1685,25 +1539,22 @@
"symbol": "fn_call"
},
{
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
},
{
- "symbol": "create_job"
+ "symbol": "mint"
}
],
"data": {
"vec": [
- {
- "u64": 1
- },
{
"address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
}
]
}
@@ -1715,30 +1566,29 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "contract",
"body": {
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "string": "create_job: id {} client {} freelancer {}"
- },
- {
- "u64": 1
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 100000
+ }
}
}
}
@@ -1748,7 +1598,7 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "diagnostic",
"body": {
"v0": {
@@ -1757,7 +1607,7 @@
"symbol": "fn_return"
},
{
- "symbol": "create_job"
+ "symbol": "mint"
}
],
"data": "void"
@@ -1781,52 +1631,16 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "add_milestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
+ "symbol": "initialize"
}
],
"data": {
"vec": [
{
- "string": "add_milestone: job {} amount {}"
- },
- {
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"
},
{
- "i128": {
- "hi": 0,
- "lo": 2000
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
}
]
}
@@ -1846,47 +1660,11 @@
{
"symbol": "fn_return"
},
- {
- "symbol": "add_milestone"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": null,
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_call"
- },
- {
- "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
- },
- {
- "symbol": "add_milestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
+ {
+ "symbol": "initialize"
+ }
+ ],
+ "data": "void"
}
}
},
@@ -1895,28 +1673,34 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "create_job"
}
],
"data": {
"vec": [
{
- "string": "add_milestone: job {} amount {}"
+ "u64": 1
},
{
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
},
{
- "i128": {
- "hi": 0,
- "lo": 3000
- }
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
]
}
@@ -1937,7 +1721,7 @@
"symbol": "fn_return"
},
{
- "symbol": "add_milestone"
+ "symbol": "create_job"
}
],
"data": "void"
@@ -1972,7 +1756,7 @@
{
"i128": {
"hi": 0,
- "lo": 5000
+ "lo": 2000
}
}
]
@@ -1991,21 +1775,45 @@
"v0": {
"topics": [
{
- "symbol": "log"
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_milestone"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ },
+ {
+ "symbol": "add_milestone"
}
],
"data": {
"vec": [
- {
- "string": "add_milestone: job {} amount {}"
- },
{
"u64": 1
},
{
"i128": {
"hi": 0,
- "lo": 5000
+ "lo": 3000
}
}
]
@@ -2051,7 +1859,7 @@
"bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "deposit"
+ "symbol": "add_milestone"
}
],
"data": {
@@ -2062,7 +1870,7 @@
{
"i128": {
"hi": 0,
- "lo": 10000
+ "lo": 5000
}
}
]
@@ -2081,13 +1889,10 @@
"v0": {
"topics": [
{
- "symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ "symbol": "fn_return"
},
{
- "symbol": "decimals"
+ "symbol": "add_milestone"
}
],
"data": "void"
@@ -2099,20 +1904,33 @@
{
"event": {
"ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "contract_id": null,
"type_": "diagnostic",
"body": {
"v0": {
"topics": [
{
- "symbol": "fn_return"
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
},
{
- "symbol": "decimals"
+ "symbol": "deposit"
}
],
"data": {
- "u32": 7
+ "vec": [
+ {
+ "u64": 1
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000
+ }
+ }
+ ]
}
}
}
@@ -2211,90 +2029,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "deposit: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 10000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "Deposit"
- }
- ],
- "data": {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 10000
- }
- }
- },
- {
- "key": {
- "symbol": "deposited_at"
- },
- "val": {
- "u64": 0
- }
- },
- {
- "key": {
- "symbol": "job_id"
- },
- "val": {
- "u64": 1
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -2411,107 +2145,21 @@
"topics": [
{
"symbol": "fn_call"
- },
- {
- "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
- },
- {
- "symbol": "transfer"
- }
- ],
- "data": {
- "vec": [
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "transfer"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
- },
- {
- "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
- },
- {
- "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
- }
- ],
- "data": {
- "i128": {
- "hi": 0,
- "lo": 2000
- }
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "fn_return"
- },
- {
- "symbol": "transfer"
- }
- ],
- "data": "void"
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
+ },
+ {
+ "bytes": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73"
+ },
{
- "symbol": "log"
+ "symbol": "transfer"
}
],
"data": {
"vec": [
{
- "string": "release_milestone: job {} amount {}"
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
},
{
- "u64": 1
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
},
{
"i128": {
@@ -2529,42 +2177,56 @@
{
"event": {
"ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
"type_": "contract",
"body": {
"v0": {
"topics": [
{
- "string": "escrow"
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
},
{
- "string": "ReleaseMilestone"
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV"
}
],
"data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "u32": 0
- },
- {
- "i128": {
- "hi": 0,
- "lo": 2000
- }
- },
- {
- "u64": 0
- }
- ]
+ "i128": {
+ "hi": 0,
+ "lo": 2000
+ }
}
}
}
},
"failed_call": false
},
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "d63a954726751a876d37290072af1ee723d7d761eec3bf4191849d2116acdc73",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
{
"event": {
"ext": "v0",
@@ -2834,78 +2496,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "ReleaseMilestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "u32": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3104,78 +2694,6 @@
},
"failed_call": false
},
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "diagnostic",
- "body": {
- "v0": {
- "topics": [
- {
- "symbol": "log"
- }
- ],
- "data": {
- "vec": [
- {
- "string": "release_milestone: job {} amount {}"
- },
- {
- "u64": 1
- },
- {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
- {
- "event": {
- "ext": "v0",
- "contract_id": "0000000000000000000000000000000000000000000000000000000000000006",
- "type_": "contract",
- "body": {
- "v0": {
- "topics": [
- {
- "string": "escrow"
- },
- {
- "string": "ReleaseMilestone"
- }
- ],
- "data": {
- "vec": [
- {
- "u64": 1
- },
- {
- "u32": 2
- },
- {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
- },
- {
- "u64": 0
- }
- ]
- }
- }
- }
- },
- "failed_call": false
- },
{
"event": {
"ext": "v0",
@@ -3308,14 +2826,6 @@
"u64": 0
}
},
- {
- "key": {
- "symbol": "dispute_deadline"
- },
- "val": {
- "u64": 0
- }
- },
{
"key": {
"symbol": "expires_at"
@@ -3334,92 +2844,10 @@
},
{
"key": {
- "symbol": "milestones"
+ "symbol": "milestone_count"
},
"val": {
- "vec": [
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 2000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 3000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- },
- {
- "map": [
- {
- "key": {
- "symbol": "amount"
- },
- "val": {
- "i128": {
- "hi": 0,
- "lo": 5000
- }
- }
- },
- {
- "key": {
- "symbol": "status"
- },
- "val": {
- "vec": [
- {
- "symbol": "Released"
- }
- ]
- }
- }
- ]
- }
- ]
+ "u32": 3
}
},
{
@@ -3433,14 +2861,6 @@
}
}
},
- {
- "key": {
- "symbol": "requires_multisig"
- },
- "val": {
- "bool": false
- }
- },
{
"key": {
"symbol": "status"
@@ -3461,14 +2881,6 @@
"address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG"
}
},
- {
- "key": {
- "symbol": "token_decimals"
- },
- "val": {
- "u32": 7
- }
- },
{
"key": {
"symbol": "total_amount"