diff --git a/apps/onchain/src/lib.rs b/apps/onchain/src/lib.rs index 5b29c52..7f92fee 100644 --- a/apps/onchain/src/lib.rs +++ b/apps/onchain/src/lib.rs @@ -4,7 +4,6 @@ use soroban_sdk::{ token, }; -// Milestone status tracking #[contracttype] #[derive(Clone, Copy, PartialEq, Eq, Debug)] pub enum MilestoneStatus { @@ -13,7 +12,6 @@ pub enum MilestoneStatus { Disputed, } -// Individual milestone in an escrow #[contracttype] #[derive(Clone, Debug)] pub struct Milestone { @@ -22,7 +20,6 @@ pub struct Milestone { pub description: Symbol, } -// Overall escrow status #[contracttype] #[derive(Clone, Copy, PartialEq, Eq, Debug)] pub enum EscrowStatus { @@ -30,9 +27,18 @@ pub enum EscrowStatus { Active, // Funds deposited and locked in contract Completed, // All milestones released Cancelled, // Escrow cancelled, funds refunded + Disputed, + Resolved, +} + +#[contracttype] +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum Resolution { + None, + Depositor, + Recipient, } -// Main escrow structure #[contracttype] #[derive(Clone, Debug)] pub struct Escrow { @@ -42,12 +48,11 @@ pub struct Escrow { pub total_amount: i128, pub total_released: i128, pub milestones: Vec, - pub token: Address, pub status: EscrowStatus, pub deadline: u64, // NEW: Deadline for escrow completion + pub resolution: Resolution, } -// Contract error types #[contracterror] #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum Error { @@ -68,6 +73,11 @@ pub enum Error { TokenTransferFailed = 15, // NEW: Token transfer error TreasuryNotInitialized = 16, InvalidFeeConfiguration = 17, + AdminNotInitialized = 18, + AlreadyInitialized = 19, + InvalidEscrowStatus = 20, + AlreadyInDispute = 21, + InvalidWinner = 22, } // Platform fee configuration (in basis points: 1 bps = 0.01%) @@ -158,6 +168,17 @@ impl VaultixEscrow { Ok((treasury, fee_bps)) } + /// Initializes the contract with an admin address responsible for dispute resolution. + pub fn init(env: Env, admin: Address) -> Result<(), Error> { + if env.storage().persistent().has(&admin_storage_key()) { + return Err(Error::AlreadyInitialized); + } + + admin.require_auth(); + env.storage().persistent().set(&admin_storage_key(), &admin); + Ok(()) + } + /// Creates a new escrow with milestone-based payment releases. /// NOTE: This only creates the escrow structure. Funds must be deposited separately via deposit_funds(). /// @@ -168,7 +189,6 @@ impl VaultixEscrow { /// * `token_address` - Address of the token contract (e.g., XLM, USDC) /// * `milestones` - Vector of milestones defining payment schedule /// * `deadline` - Unix timestamp deadline for escrow completion - /// * `token` - Token contract address for payments /// /// # Errors /// * `EscrowAlreadyExists` - If escrow_id is already in use @@ -184,24 +204,19 @@ impl VaultixEscrow { milestones: Vec, deadline: u64, ) -> Result<(), Error> { - // Authenticate the depositor depositor.require_auth(); - // Validate no self-dealing (depositor cannot be recipient) if depositor == recipient { return Err(Error::SelfDealing); } - // Check if escrow already exists let storage_key = get_storage_key(escrow_id); if env.storage().persistent().has(&storage_key) { return Err(Error::EscrowAlreadyExists); } - // Validate milestones and calculate total let total_amount = validate_milestones(&milestones)?; - // Initialize all milestones to Pending status let mut initialized_milestones = Vec::new(&env); for milestone in milestones.iter() { let mut m = milestone.clone(); @@ -217,12 +232,11 @@ impl VaultixEscrow { total_amount, total_released: 0, milestones: initialized_milestones, - token: token_address, status: EscrowStatus::Created, // Initially Created, becomes Active after deposit deadline, + resolution: Resolution::None, }; - // Save to persistent storage env.storage().persistent().set(&storage_key, &escrow); // Extend TTL for long-term storage @@ -284,7 +298,6 @@ impl VaultixEscrow { env.storage() .persistent() .extend_ttl(&storage_key, 100, 2_000_000); - Ok(()) } @@ -308,7 +321,6 @@ impl VaultixEscrow { /// # Arguments /// * `escrow_id` - Identifier of the escrow /// * `milestone_index` - Index of the milestone to release - /// * `token_address` - Address of the token contract for transfers /// /// # Errors /// * `EscrowNotFound` - If escrow doesn't exist @@ -322,15 +334,10 @@ impl VaultixEscrow { /// Platform fee is calculated using basis points: fee = (amount * fee_bps) / 10000 /// The recipient receives: amount - fee /// The treasury receives: fee - pub fn release_milestone( - env: Env, - escrow_id: u64, - milestone_index: u32, - token_address: Address, - ) -> Result<(), Error> { + /// Releases a specific milestone payment to the recipient (depositor-driven path). + pub fn release_milestone(env: Env, escrow_id: u64, milestone_index: u32) -> Result<(), Error> { let storage_key = get_storage_key(escrow_id); - // Load escrow from storage let mut escrow: Escrow = env .storage() .persistent() @@ -345,12 +352,10 @@ impl VaultixEscrow { return Err(Error::EscrowNotActive); } - // Verify milestone index is valid if milestone_index >= escrow.milestones.len() { return Err(Error::MilestoneNotFound); } - // Get the milestone let mut milestone = escrow .milestones .get(milestone_index) @@ -373,7 +378,7 @@ impl VaultixEscrow { .ok_or(Error::InvalidMilestoneAmount)?; // Create token client for transfers - let token_client = token::Client::new(&env, &token_address); + let token_client = token::Client::new(&env, &escrow.token_address); // Transfer payout to recipient (seller) token_client.transfer(&env.current_contract_address(), &escrow.recipient, &payout); @@ -390,17 +395,14 @@ impl VaultixEscrow { ); } - // Update milestone status milestone.status = MilestoneStatus::Released; escrow.milestones.set(milestone_index, milestone.clone()); - // Update total released with overflow protection escrow.total_released = escrow .total_released .checked_add(milestone.amount) .ok_or(Error::InvalidMilestoneAmount)?; - // Save updated escrow env.storage().persistent().set(&storage_key, &escrow); // Extend TTL @@ -418,19 +420,7 @@ impl VaultixEscrow { Ok(()) } - /// Buyer confirms delivery and releases a milestone to the recipient. - /// - /// # Arguments - /// * `escrow_id` - Identifier of the escrow - /// * `milestone_index` - Index of the milestone to release - /// * `buyer` - Buyer address confirming the delivery - /// - /// # Errors - /// * `EscrowNotFound` - If escrow doesn't exist - /// * `UnauthorizedAccess` - If caller is not the buyer/depositor - /// * `EscrowNotActive` - If escrow is completed or cancelled - /// * `MilestoneNotFound` - If index is out of bounds - /// * `MilestoneAlreadyReleased` - If milestone was already released + /// Buyer confirms delivery and releases a milestone to the recipient (buyer-driven path). pub fn confirm_delivery( env: Env, escrow_id: u64, @@ -439,61 +429,164 @@ impl VaultixEscrow { ) -> Result<(), Error> { let storage_key = get_storage_key(escrow_id); - // Load escrow from storage let mut escrow: Escrow = env .storage() .persistent() .get(&storage_key) .ok_or(Error::EscrowNotFound)?; - // Security Check: Verify buyer authorization buyer.require_auth(); - // Security Check: Ensure caller is the depositor if escrow.depositor != buyer { return Err(Error::UnauthorizedAccess); } - // Check escrow is active if escrow.status != EscrowStatus::Active { return Err(Error::EscrowNotActive); } - // Verify milestone index is valid if milestone_index >= escrow.milestones.len() { return Err(Error::MilestoneNotFound); } - // Get the milestone let mut milestone = escrow .milestones .get(milestone_index) .ok_or(Error::MilestoneNotFound)?; - // Check if already released if milestone.status == MilestoneStatus::Released { return Err(Error::MilestoneAlreadyReleased); } - // Update milestone status milestone.status = MilestoneStatus::Released; escrow.milestones.set(milestone_index, milestone.clone()); - // Update total released with overflow protection escrow.total_released = escrow .total_released .checked_add(milestone.amount) .ok_or(Error::InvalidMilestoneAmount)?; - // Execute token transfer from contract to recipient - let token_client = token::Client::new(&env, &escrow.token); + let token_client = token::Client::new(&env, &escrow.token_address); token_client.transfer( &env.current_contract_address(), &escrow.recipient, &milestone.amount, ); - // Save updated escrow + env.storage().persistent().set(&storage_key, &escrow); + + Ok(()) + } + + /// Raises a dispute on an active escrow. Either party (depositor or recipient) may invoke this. + pub fn raise_dispute(env: Env, escrow_id: u64, caller: Address) -> Result<(), Error> { + let storage_key = get_storage_key(escrow_id); + + let mut escrow: Escrow = env + .storage() + .persistent() + .get(&storage_key) + .ok_or(Error::EscrowNotFound)?; + + if caller != escrow.depositor && caller != escrow.recipient { + return Err(Error::UnauthorizedAccess); + } + caller.require_auth(); + + if escrow.status == EscrowStatus::Disputed { + return Err(Error::AlreadyInDispute); + } + if escrow.status != EscrowStatus::Active && escrow.status != EscrowStatus::Created { + return Err(Error::InvalidEscrowStatus); + } + + let mut updated_milestones = Vec::new(&env); + for milestone in escrow.milestones.iter() { + let mut m = milestone.clone(); + if m.status == MilestoneStatus::Pending { + m.status = MilestoneStatus::Disputed; + } + updated_milestones.push_back(m); + } + + escrow.milestones = updated_milestones; + escrow.status = EscrowStatus::Disputed; + escrow.resolution = Resolution::None; + env.storage().persistent().set(&storage_key, &escrow); + + Ok(()) + } + + /// Resolves an active dispute by directing funds to the chosen party. Only the admin may call this. + pub fn resolve_dispute(env: Env, escrow_id: u64, winner: Address) -> Result<(), Error> { + let admin = get_admin(&env)?; + admin.require_auth(); + + let storage_key = get_storage_key(escrow_id); + + let mut escrow: Escrow = env + .storage() + .persistent() + .get(&storage_key) + .ok_or(Error::EscrowNotFound)?; + + if escrow.status != EscrowStatus::Disputed { + return Err(Error::InvalidEscrowStatus); + } + + if winner != escrow.depositor && winner != escrow.recipient { + return Err(Error::InvalidWinner); + } + + let outstanding = escrow + .total_amount + .checked_sub(escrow.total_released) + .ok_or(Error::InvalidMilestoneAmount)?; + + let token_client = token::Client::new(&env, &escrow.token_address); + + if winner == escrow.recipient { + let mut updated_milestones = Vec::new(&env); + for milestone in escrow.milestones.iter() { + let mut m = milestone.clone(); + if m.status != MilestoneStatus::Released { + m.status = MilestoneStatus::Released; + } + updated_milestones.push_back(m); + } + escrow.milestones = updated_milestones; + escrow.total_released = escrow.total_amount; + escrow.resolution = Resolution::Recipient; + + if outstanding > 0 { + token_client.transfer( + &env.current_contract_address(), + &escrow.recipient, + &outstanding, + ); + } + } else { + let mut updated_milestones = Vec::new(&env); + for milestone in escrow.milestones.iter() { + let mut m = milestone.clone(); + if m.status == MilestoneStatus::Pending || m.status == MilestoneStatus::Disputed { + m.status = MilestoneStatus::Disputed; + } + updated_milestones.push_back(m); + } + escrow.milestones = updated_milestones; + escrow.resolution = Resolution::Depositor; + + if outstanding > 0 { + token_client.transfer( + &env.current_contract_address(), + &escrow.depositor, + &outstanding, + ); + } + } + + escrow.status = EscrowStatus::Resolved; env.storage().persistent().set(&storage_key, &escrow); Ok(()) @@ -518,10 +611,12 @@ impl VaultixEscrow { .get(&storage_key) .ok_or(Error::EscrowNotFound)?; - // Verify authorization escrow.depositor.require_auth(); - // Verify no milestones have been released + if escrow.status != EscrowStatus::Active && escrow.status != EscrowStatus::Created { + return Err(Error::InvalidEscrowStatus); + } + if escrow.total_released > 0 { return Err(Error::MilestoneAlreadyReleased); } @@ -538,7 +633,6 @@ impl VaultixEscrow { ); } - // Update status escrow.status = EscrowStatus::Cancelled; env.storage().persistent().set(&storage_key, &escrow); @@ -551,14 +645,6 @@ impl VaultixEscrow { } /// Marks an escrow as completed after all milestones are released. - /// - /// # Arguments - /// * `escrow_id` - Identifier of the escrow - /// - /// # Errors - /// * `EscrowNotFound` - If escrow doesn't exist - /// * `UnauthorizedAccess` - If caller is not the depositor - /// * `EscrowNotActive` - If not all milestones are released pub fn complete_escrow(env: Env, escrow_id: u64) -> Result<(), Error> { let storage_key = get_storage_key(escrow_id); @@ -568,15 +654,16 @@ impl VaultixEscrow { .get(&storage_key) .ok_or(Error::EscrowNotFound)?; - // Verify authorization escrow.depositor.require_auth(); - // Verify all milestones are released + if escrow.status != EscrowStatus::Active { + return Err(Error::InvalidEscrowStatus); + } + if !verify_all_released(&escrow.milestones) { return Err(Error::EscrowNotActive); } - // Update status escrow.status = EscrowStatus::Completed; env.storage().persistent().set(&storage_key, &escrow); @@ -589,21 +676,28 @@ impl VaultixEscrow { } } -// Helper function to generate storage key fn get_storage_key(escrow_id: u64) -> (Symbol, u64) { (symbol_short!("escrow"), escrow_id) } -// Validates milestone vector and returns total amount +fn admin_storage_key() -> Symbol { + symbol_short!("admin") +} + +fn get_admin(env: &Env) -> Result { + env.storage() + .persistent() + .get(&admin_storage_key()) + .ok_or(Error::AdminNotInitialized) +} + fn validate_milestones(milestones: &Vec) -> Result { - // Check vector size to prevent gas issues if milestones.len() > 20 { return Err(Error::VectorTooLarge); } let mut total: i128 = 0; - // Validate each milestone and calculate total for milestone in milestones.iter() { if milestone.amount <= 0 { return Err(Error::ZeroAmount); @@ -617,7 +711,6 @@ fn validate_milestones(milestones: &Vec) -> Result { Ok(total) } -// Checks if all milestones have been released fn verify_all_released(milestones: &Vec) -> bool { for milestone in milestones.iter() { if milestone.status != MilestoneStatus::Released { @@ -654,6 +747,5 @@ fn calculate_fee(amount: i128, fee_bps: i128) -> Result { Ok(fee) } - #[cfg(test)] mod test; diff --git a/apps/onchain/src/test.rs b/apps/onchain/src/test.rs index d5f8457..5a19185 100644 --- a/apps/onchain/src/test.rs +++ b/apps/onchain/src/test.rs @@ -10,6 +10,16 @@ fn create_test_token<'a>(env: &Env, admin: &Address) -> (token::StellarAssetClie (token_admin_client, token_address) } +/// Helper function to create token client + admin + address +fn create_token_contract<'a>( + env: &Env, + admin: &Address, +) -> (token::Client<'a>, token::StellarAssetClient<'a>, Address) { + let (token_admin, token_address) = create_test_token(env, admin); + let token_client = token::Client::new(env, &token_address); + (token_client, token_admin, token_address) +} + #[test] fn test_create_and_get_escrow() { let env = Env::default(); @@ -24,9 +34,9 @@ fn test_create_and_get_escrow() { let escrow_id = 1u64; // Setup token - let (_, token_address) = create_test_token(&env, &admin); + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &10000); - // Create milestones let milestones = vec![ &env, Milestone { @@ -48,7 +58,6 @@ fn test_create_and_get_escrow() { let deadline = 1706400000u64; - // Create escrow client.create_escrow( &escrow_id, &depositor, @@ -58,7 +67,6 @@ fn test_create_and_get_escrow() { &deadline, ); - // Retrieve escrow let escrow = client.get_escrow(&escrow_id); assert_eq!(escrow.depositor, depositor); assert_eq!(escrow.recipient, recipient); @@ -68,6 +76,10 @@ fn test_create_and_get_escrow() { assert_eq!(escrow.status, EscrowStatus::Created); assert_eq!(escrow.milestones.len(), 3); assert_eq!(escrow.deadline, deadline); + + assert_eq!(token_client.balance(&depositor), 10000); + assert_eq!(token_client.balance(&contract_id), 0); + assert_eq!(token_client.balance(&recipient), 0); } #[test] @@ -84,9 +96,7 @@ fn test_deposit_funds() { let escrow_id = 2u64; // Setup token - get admin client for minting - let (token_admin, token_address) = create_test_token(&env, &admin); - // Create regular client for other operations - let token_client = token::Client::new(&env, &token_address); + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); let initial_balance: i128 = 20_000; token_admin.mint(&depositor, &initial_balance); @@ -143,9 +153,12 @@ fn test_release_milestone_with_tokens() { let admin = Address::generate(&env); let escrow_id = 3u64; + // Initialize treasury (fee-free for test) + let treasury = Address::generate(&env); + client.initialize(&treasury, &Some(0)); + // Setup token - let (token_admin, token_address) = create_test_token(&env, &admin); - let token_client = token::Client::new(&env, &token_address); + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); token_admin.mint(&depositor, &10_000); @@ -179,8 +192,8 @@ fn test_release_milestone_with_tokens() { assert_eq!(token_client.balance(&contract_id), 10_000); assert_eq!(token_client.balance(&recipient), 0); - // Buyer confirms delivery and releases first milestone - client.confirm_delivery(&escrow_id, &0, &depositor); + // Depositor releases first milestone + client.release_milestone(&escrow_id, &0); // Verify tokens transferred to recipient assert_eq!(token_client.balance(&contract_id), 4000); @@ -197,6 +210,55 @@ fn test_release_milestone_with_tokens() { escrow.milestones.get(1).unwrap().status, MilestoneStatus::Pending ); + + assert_eq!(token_client.balance(&contract_id), 4000); + assert_eq!(token_client.balance(&recipient), 6000); +} + +#[test] +#[should_panic(expected = "Error(Contract, #9)")] +fn test_dispute_blocks_release() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(VaultixEscrow, ()); + let client = VaultixEscrowClient::new(&env, &contract_id); + + let depositor = Address::generate(&env); + let recipient = Address::generate(&env); + let admin = Address::generate(&env); + let escrow_id = 9u64; + + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &1000); + + let milestones = vec![ + &env, + Milestone { + amount: 500, + status: MilestoneStatus::Pending, + description: symbol_short!("Task"), + }, + ]; + + client.create_escrow( + &escrow_id, + &depositor, + &recipient, + &token_address, + &milestones, + &1706400000u64, + ); + + token_client.approve(&depositor, &contract_id, &1000, &200); + client.deposit_funds(&escrow_id); + + client.raise_dispute(&escrow_id, &depositor); + + let escrow = client.get_escrow(&escrow_id); + assert_eq!(escrow.status, EscrowStatus::Disputed); + + client.release_milestone(&escrow_id, &0); } #[test] @@ -213,9 +275,7 @@ fn test_complete_escrow_with_all_releases() { let escrow_id = 4u64; // Setup token - let (token_admin, token_address) = create_test_token(&env, &admin); - let token_client = token::Client::new(&env, &token_address); - + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); token_admin.mint(&depositor, &10_000); let milestones = vec![ @@ -252,7 +312,6 @@ fn test_complete_escrow_with_all_releases() { assert_eq!(token_client.balance(&contract_id), 0); assert_eq!(token_client.balance(&recipient), 10_000); - // Complete the escrow client.complete_escrow(&escrow_id); let escrow = client.get_escrow(&escrow_id); @@ -274,13 +333,9 @@ fn test_cancel_escrow_with_refund() { let escrow_id = 5u64; // Setup token - let (token_admin, token_address) = create_test_token(&env, &admin); - let token_client = token::Client::new(&env, &token_address); - + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); token_admin.mint(&depositor, &10_000); - // Create token contract and mint tokens - let milestones = vec![ &env, Milestone { @@ -358,6 +413,134 @@ fn test_cancel_unfunded_escrow() { assert_eq!(escrow.status, EscrowStatus::Cancelled); } +#[test] +fn test_admin_resolves_dispute_to_recipient() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(VaultixEscrow, ()); + let client = VaultixEscrowClient::new(&env, &contract_id); + + let admin = Address::generate(&env); + let depositor = Address::generate(&env); + let recipient = Address::generate(&env); + let escrow_id = 10u64; + + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &10000); + + client.init(&admin); + + let milestones = vec![ + &env, + Milestone { + amount: 4000, + status: MilestoneStatus::Pending, + description: symbol_short!("Phase1"), + }, + Milestone { + amount: 6000, + status: MilestoneStatus::Pending, + description: symbol_short!("Phase2"), + }, + ]; + + client.create_escrow( + &escrow_id, + &depositor, + &recipient, + &token_address, + &milestones, + &1706400000u64, + ); + + token_client.approve(&depositor, &contract_id, &10000, &200); + client.deposit_funds(&escrow_id); + + client.raise_dispute(&escrow_id, &recipient); + + client.resolve_dispute(&escrow_id, &recipient); + + let escrow = client.get_escrow(&escrow_id); + assert_eq!(escrow.status, EscrowStatus::Resolved); + assert_eq!(escrow.resolution, Resolution::Recipient); + assert_eq!(escrow.total_released, escrow.total_amount); + assert!( + escrow + .milestones + .iter() + .all(|m| m.status == MilestoneStatus::Released) + ); + + assert_eq!(token_client.balance(&recipient), 10000); + assert_eq!(token_client.balance(&contract_id), 0); + assert_eq!(token_client.balance(&depositor), 0); +} + +#[test] +fn test_admin_resolves_dispute_to_depositor() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(VaultixEscrow, ()); + let client = VaultixEscrowClient::new(&env, &contract_id); + + let admin = Address::generate(&env); + let depositor = Address::generate(&env); + let recipient = Address::generate(&env); + let escrow_id = 11u64; + + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &5000); + + client.init(&admin); + + let milestones = vec![ + &env, + Milestone { + amount: 2000, + status: MilestoneStatus::Pending, + description: symbol_short!("Alpha"), + }, + Milestone { + amount: 3000, + status: MilestoneStatus::Pending, + description: symbol_short!("Beta"), + }, + ]; + + client.create_escrow( + &escrow_id, + &depositor, + &recipient, + &token_address, + &milestones, + &1706400000u64, + ); + + token_client.approve(&depositor, &contract_id, &5000, &200); + client.deposit_funds(&escrow_id); + + client.raise_dispute(&escrow_id, &depositor); + + client.resolve_dispute(&escrow_id, &depositor); + + let escrow = client.get_escrow(&escrow_id); + assert_eq!(escrow.status, EscrowStatus::Resolved); + assert_eq!(escrow.resolution, Resolution::Depositor); + assert_eq!(escrow.total_released, 0); + assert!( + escrow + .milestones + .iter() + .all(|m| m.status == MilestoneStatus::Disputed) + ); + + assert_eq!(token_client.balance(&depositor), 5000); + assert_eq!(token_client.balance(&contract_id), 0); + assert_eq!(token_client.balance(&recipient), 0); +} + #[test] #[should_panic(expected = "Error(Contract, #2)")] fn test_duplicate_escrow_id() { @@ -372,7 +555,8 @@ fn test_duplicate_escrow_id() { let admin = Address::generate(&env); let escrow_id = 7u64; - let (_, token_address) = create_test_token(&env, &admin); + let (_token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &10000); let milestones = vec![ &env, @@ -391,7 +575,6 @@ fn test_duplicate_escrow_id() { &milestones, &1706400000u64, ); - // This should panic with Error #2 (EscrowAlreadyExists) client.create_escrow( &escrow_id, &depositor, @@ -419,9 +602,7 @@ fn test_double_release() { let admin = Address::generate(&env); let escrow_id = 8u64; - let (token_admin, token_address) = create_test_token(&env, &admin); - let token_client = token::Client::new(&env, &token_address); - + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); token_admin.mint(&depositor, &2000); // Increased to cover fees let milestones = vec![ @@ -445,10 +626,10 @@ fn test_double_release() { client.deposit_funds(&escrow_id); // First release should succeed - client.release_milestone(&escrow_id, &0, &token_address); + client.release_milestone(&escrow_id, &0); // Second release should fail with MilestoneAlreadyReleased - let result = client.try_release_milestone(&escrow_id, &0, &token_address); + let result = client.try_release_milestone(&escrow_id, &0); assert_eq!(result, Err(Ok(Error::MilestoneAlreadyReleased))); } @@ -466,9 +647,9 @@ fn test_too_many_milestones() { let admin = Address::generate(&env); let escrow_id = 9u64; - let (_, token_address) = create_test_token(&env, &admin); + let (_token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &10000); - // Create 21 milestones (exceeds max of 20) let mut milestones = Vec::new(&env); for _i in 0..21 { milestones.push_back(Milestone { @@ -478,7 +659,6 @@ fn test_too_many_milestones() { }); } - // This should panic with Error #10 (VectorTooLarge) client.create_escrow( &escrow_id, &depositor, @@ -503,7 +683,8 @@ fn test_invalid_milestone_amount() { let admin = Address::generate(&env); let escrow_id = 10u64; - let (_, token_address) = create_test_token(&env, &admin); + let (_token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &10000); let milestones = vec![ &env, @@ -514,7 +695,6 @@ fn test_invalid_milestone_amount() { }, ]; - // This should panic with Error #11 (ZeroAmount) client.create_escrow( &escrow_id, &depositor, @@ -525,6 +705,91 @@ fn test_invalid_milestone_amount() { ); } +#[test] +#[should_panic(expected = "Error(Contract, #5)")] +fn test_unauthorized_confirm_delivery() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(VaultixEscrow, ()); + let client = VaultixEscrowClient::new(&env, &contract_id); + + let buyer = Address::generate(&env); + let seller = Address::generate(&env); + let non_buyer = Address::generate(&env); + let admin = Address::generate(&env); + let escrow_id = 9u64; + + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&buyer, &10000); + + let milestones = vec![ + &env, + Milestone { + amount: 1000, + status: MilestoneStatus::Pending, + description: symbol_short!("Task"), + }, + ]; + + client.create_escrow( + &escrow_id, + &buyer, + &seller, + &token_address, + &milestones, + &1706400000u64, + ); + + token_client.approve(&buyer, &contract_id, &1000, &200); + client.deposit_funds(&escrow_id); + + client.confirm_delivery(&escrow_id, &0, &non_buyer); +} + +#[test] +#[should_panic(expected = "Error(Contract, #4)")] +fn test_double_confirm_delivery() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(VaultixEscrow, ()); + let client = VaultixEscrowClient::new(&env, &contract_id); + + let buyer = Address::generate(&env); + let seller = Address::generate(&env); + let admin = Address::generate(&env); + let escrow_id = 10u64; + + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&buyer, &10000); + + let milestones = vec![ + &env, + Milestone { + amount: 1000, + status: MilestoneStatus::Pending, + description: symbol_short!("Task"), + }, + ]; + + client.create_escrow( + &escrow_id, + &buyer, + &seller, + &token_address, + &milestones, + &1706400000u64, + ); + + token_client.approve(&buyer, &contract_id, &1000, &200); + client.deposit_funds(&escrow_id); + + client.confirm_delivery(&escrow_id, &0, &buyer); + + client.confirm_delivery(&escrow_id, &0, &buyer); +} + #[test] fn test_zero_amount_milestone_rejected() { let env = Env::default(); @@ -537,9 +802,9 @@ fn test_zero_amount_milestone_rejected() { let admin = Address::generate(&env); let escrow_id = 11u64; - let (_, token_address) = create_test_token(&env, &admin); + let (_token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &10000); - // Create milestones with one zero amount let milestones = vec![ &env, Milestone { @@ -549,7 +814,6 @@ fn test_zero_amount_milestone_rejected() { }, ]; - // Attempt to create escrow with zero amount milestone let result = client.try_create_escrow( &escrow_id, &depositor, @@ -559,7 +823,6 @@ fn test_zero_amount_milestone_rejected() { &1706400000u64, ); - // Assert specific error is returned assert_eq!(result, Err(Ok(Error::ZeroAmount))); } @@ -575,9 +838,9 @@ fn test_negative_amount_milestone_rejected() { let admin = Address::generate(&env); let escrow_id = 12u64; - let (_, token_address) = create_test_token(&env, &admin); + let (_token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &10000); - // Create milestones with negative amount let milestones = vec![ &env, Milestone { @@ -587,7 +850,6 @@ fn test_negative_amount_milestone_rejected() { }, ]; - // Attempt to create escrow let result = client.try_create_escrow( &escrow_id, &depositor, @@ -597,7 +859,6 @@ fn test_negative_amount_milestone_rejected() { &1706400000u64, ); - // Assert ZeroAmount error (covers negative case) assert_eq!(result, Err(Ok(Error::ZeroAmount))); } @@ -612,9 +873,9 @@ fn test_self_dealing_rejected() { let admin = Address::generate(&env); let escrow_id = 13u64; - let (_, token_address) = create_test_token(&env, &admin); + let (_token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&same_party, &10000); - // Create valid milestones let milestones = vec![ &env, Milestone { @@ -624,7 +885,6 @@ fn test_self_dealing_rejected() { }, ]; - // Attempt to create escrow where depositor == recipient let result = client.try_create_escrow( &escrow_id, &same_party, @@ -634,7 +894,6 @@ fn test_self_dealing_rejected() { &1706400000u64, ); - // Assert SelfDealing error assert_eq!(result, Err(Ok(Error::SelfDealing))); } @@ -650,9 +909,9 @@ fn test_valid_escrow_creation_succeeds() { let admin = Address::generate(&env); let escrow_id = 14u64; - let (_, token_address) = create_test_token(&env, &admin); + let (_token_client, token_admin, token_address) = create_token_contract(&env, &admin); + token_admin.mint(&depositor, &10000); - // Valid milestones with positive amounts let milestones = vec![ &env, Milestone { @@ -667,7 +926,6 @@ fn test_valid_escrow_creation_succeeds() { }, ]; - // Create escrow - should succeed let result = client.try_create_escrow( &escrow_id, &depositor, @@ -677,10 +935,8 @@ fn test_valid_escrow_creation_succeeds() { &1706400000u64, ); - // Assert success assert!(result.is_ok()); - // Verify escrow was created correctly let escrow = client.get_escrow(&escrow_id); assert_eq!(escrow.depositor, depositor); assert_eq!(escrow.recipient, recipient); @@ -702,8 +958,7 @@ fn test_double_deposit_rejected() { let admin = Address::generate(&env); let escrow_id = 15u64; - let (token_admin, token_address) = create_test_token(&env, &admin); - let token_client = token::Client::new(&env, &token_address); + let (token_client, token_admin, token_address) = create_token_contract(&env, &admin); token_admin.mint(&depositor, &20_000); @@ -768,5 +1023,5 @@ fn test_release_milestone_before_deposit() { // Try to release milestone before depositing funds // This should panic with Error #9 (EscrowNotActive) - client.release_milestone(&escrow_id, &0, &token_address); + client.release_milestone(&escrow_id, &0); } diff --git a/apps/onchain/test_snapshots/test/test_admin_resolves_dispute_to_depositor.1.json b/apps/onchain/test_snapshots/test/test_admin_resolves_dispute_to_depositor.1.json new file mode 100644 index 0000000..04d33cb --- /dev/null +++ b/apps/onchain/test_snapshots/test/test_admin_resolves_dispute_to_depositor.1.json @@ -0,0 +1,956 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "i128": "5000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "init", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_escrow", + "args": [ + { + "u64": "11" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "2000" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Alpha" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + }, + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "3000" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Beta" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + ] + }, + { + "u64": "1706400000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "approve", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": "5000" + }, + { + "u32": 200 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "deposit_funds", + "args": [ + { + "u64": "11" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "raise_dispute", + "args": [ + { + "u64": "11" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "resolve_dispute", + "args": [ + { + "u64": "11" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 25, + "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": [ + { + "entry": { + "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" + }, + "live_until": null + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "symbol": "admin" + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "escrow" + }, + { + "u64": "11" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "deadline" + }, + "val": { + "u64": "1706400000" + } + }, + { + "key": { + "symbol": "depositor" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "milestones" + }, + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "2000" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Alpha" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Disputed" + } + ] + } + } + ] + }, + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "3000" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Beta" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Disputed" + } + ] + } + } + ] + } + ] + } + }, + { + "key": { + "symbol": "recipient" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "Depositor" + } + ] + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Resolved" + } + ] + } + }, + { + "key": { + "symbol": "token_address" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": "5000" + } + }, + { + "key": { + "symbol": "total_released" + }, + "val": { + "i128": "0" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "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" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "6277191135259896685" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "2032731177588607455" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "4270020994084947596" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "4837995959683129791" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "8370022561469687789" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Allowance" + }, + { + "map": [ + { + "key": { + "symbol": "from" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "spender" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + ] + } + ] + }, + "durability": "temporary", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "live_until_ledger" + }, + "val": { + "u32": 200 + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 200 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, + { + "entry": { + "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": "5000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, + { + "entry": { + "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "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" + }, + "live_until": 120960 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/apps/onchain/test_snapshots/test/test_admin_resolves_dispute_to_recipient.1.json b/apps/onchain/test_snapshots/test/test_admin_resolves_dispute_to_recipient.1.json new file mode 100644 index 0000000..11b0769 --- /dev/null +++ b/apps/onchain/test_snapshots/test/test_admin_resolves_dispute_to_recipient.1.json @@ -0,0 +1,1008 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "init", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_escrow", + "args": [ + { + "u64": "10" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "4000" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Phase1" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + }, + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "6000" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Phase2" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + ] + }, + { + "u64": "1706400000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "approve", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": "10000" + }, + { + "u32": 200 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "deposit_funds", + "args": [ + { + "u64": "10" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "raise_dispute", + "args": [ + { + "u64": "10" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "resolve_dispute", + "args": [ + { + "u64": "10" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 25, + "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": [ + { + "entry": { + "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" + }, + "live_until": null + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "symbol": "admin" + }, + "durability": "persistent", + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "escrow" + }, + { + "u64": "10" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "deadline" + }, + "val": { + "u64": "1706400000" + } + }, + { + "key": { + "symbol": "depositor" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "milestones" + }, + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "4000" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Phase1" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + }, + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "6000" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Phase2" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Released" + } + ] + } + } + ] + } + ] + } + }, + { + "key": { + "symbol": "recipient" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "Recipient" + } + ] + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Resolved" + } + ] + } + }, + { + "key": { + "symbol": "token_address" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "total_released" + }, + "val": { + "i128": "10000" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "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" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "6277191135259896685" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "2032731177588607455" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "4270020994084947596" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "4837995959683129791" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": "8370022561469687789" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Allowance" + }, + { + "map": [ + { + "key": { + "symbol": "from" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "spender" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + ] + } + ] + }, + "durability": "temporary", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "live_until_ledger" + }, + "val": { + "u32": 200 + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 200 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, + { + "entry": { + "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": "0" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, + { + "entry": { + "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": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, + { + "entry": { + "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "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" + }, + "live_until": 120960 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/apps/onchain/test_snapshots/test/test_buyer_confirm_delivery.1.json b/apps/onchain/test_snapshots/test/test_buyer_confirm_delivery.1.json index 3423c9f..96e3026 100644 --- a/apps/onchain/test_snapshots/test/test_buyer_confirm_delivery.1.json +++ b/apps/onchain/test_snapshots/test/test_buyer_confirm_delivery.1.json @@ -354,6 +354,18 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "None" + } + ] + } + }, { "key": { "symbol": "status" diff --git a/apps/onchain/test_snapshots/test/test_cancel_escrow.1.json b/apps/onchain/test_snapshots/test/test_cancel_escrow.1.json index 366311a..8e08a87 100644 --- a/apps/onchain/test_snapshots/test/test_cancel_escrow.1.json +++ b/apps/onchain/test_snapshots/test/test_cancel_escrow.1.json @@ -281,6 +281,18 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "None" + } + ] + } + }, { "key": { "symbol": "status" diff --git a/apps/onchain/test_snapshots/test/test_cancel_escrow_with_refund.1.json b/apps/onchain/test_snapshots/test/test_cancel_escrow_with_refund.1.json index ea9dd70..a85453a 100644 --- a/apps/onchain/test_snapshots/test/test_cancel_escrow_with_refund.1.json +++ b/apps/onchain/test_snapshots/test/test_cancel_escrow_with_refund.1.json @@ -106,9 +106,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -327,22 +324,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Cancelled" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Cancelled" + } + ] } }, { diff --git a/apps/onchain/test_snapshots/test/test_cancel_unfunded_escrow.1.json b/apps/onchain/test_snapshots/test/test_cancel_unfunded_escrow.1.json index 7d90938..f9f0543 100644 --- a/apps/onchain/test_snapshots/test/test_cancel_unfunded_escrow.1.json +++ b/apps/onchain/test_snapshots/test/test_cancel_unfunded_escrow.1.json @@ -84,9 +84,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -254,22 +251,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Cancelled" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Cancelled" + } + ] } }, { diff --git a/apps/onchain/test_snapshots/test/test_complete_escrow.1.json b/apps/onchain/test_snapshots/test/test_complete_escrow.1.json index 73b6672..d809f9a 100644 --- a/apps/onchain/test_snapshots/test/test_complete_escrow.1.json +++ b/apps/onchain/test_snapshots/test/test_complete_escrow.1.json @@ -395,6 +395,18 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "None" + } + ] + } + }, { "key": { "symbol": "status" diff --git a/apps/onchain/test_snapshots/test/test_complete_escrow_with_all_releases.1.json b/apps/onchain/test_snapshots/test/test_complete_escrow_with_all_releases.1.json index d635715..dc34b44 100644 --- a/apps/onchain/test_snapshots/test/test_complete_escrow_with_all_releases.1.json +++ b/apps/onchain/test_snapshots/test/test_complete_escrow_with_all_releases.1.json @@ -138,9 +138,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -439,22 +436,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Completed" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Completed" + } + ] } }, { diff --git a/apps/onchain/test_snapshots/test/test_create_and_get_escrow.1.json b/apps/onchain/test_snapshots/test/test_create_and_get_escrow.1.json index c3f553d..ea3d07a 100644 --- a/apps/onchain/test_snapshots/test/test_create_and_get_escrow.1.json +++ b/apps/onchain/test_snapshots/test/test_create_and_get_escrow.1.json @@ -25,6 +25,28 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", @@ -148,9 +170,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -159,6 +178,9 @@ } ] ], + [], + [], + [], [] ], "ledger": { @@ -363,22 +385,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Created" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Created" + } + ] } }, { @@ -443,6 +469,26 @@ "contract_data": { "ext": "v0", "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { "nonce": "5541220902715666415" @@ -456,6 +502,58 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_deposit_funds.1.json b/apps/onchain/test_snapshots/test/test_deposit_funds.1.json index 76af8e0..9f9b1b3 100644 --- a/apps/onchain/test_snapshots/test/test_deposit_funds.1.json +++ b/apps/onchain/test_snapshots/test/test_deposit_funds.1.json @@ -138,9 +138,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -370,22 +367,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Active" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Active" + } + ] } }, { diff --git a/apps/onchain/test_snapshots/test/test_dispute_blocks_release.1.json b/apps/onchain/test_snapshots/test/test_dispute_blocks_release.1.json new file mode 100644 index 0000000..f48db17 --- /dev/null +++ b/apps/onchain/test_snapshots/test/test_dispute_blocks_release.1.json @@ -0,0 +1,789 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "1000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_escrow", + "args": [ + { + "u64": "9" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, + { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "500" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Task" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + ] + }, + { + "u64": "1706400000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "approve", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": "1000" + }, + { + "u32": 200 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "deposit_funds", + "args": [ + { + "u64": "9" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "raise_dispute", + "args": [ + { + "u64": "9" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 25, + "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": [ + { + "entry": { + "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" + }, + "live_until": null + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "escrow" + }, + { + "u64": "9" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "deadline" + }, + "val": { + "u64": "1706400000" + } + }, + { + "key": { + "symbol": "depositor" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "milestones" + }, + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "500" + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "symbol": "Task" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Disputed" + } + ] + } + } + ] + } + ] + } + }, + { + "key": { + "symbol": "recipient" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "None" + } + ] + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "vec": [ + { + "symbol": "Disputed" + } + ] + } + }, + { + "key": { + "symbol": "token_address" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + }, + { + "key": { + "symbol": "total_amount" + }, + "val": { + "i128": "500" + } + }, + { + "key": { + "symbol": "total_released" + }, + "val": { + "i128": "0" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "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" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "2032731177588607455" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "4270020994084947596" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "4837995959683129791" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Allowance" + }, + { + "map": [ + { + "key": { + "symbol": "from" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "spender" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + ] + } + ] + }, + "durability": "temporary", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "500" + } + }, + { + "key": { + "symbol": "live_until_ledger" + }, + "val": { + "u32": 200 + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 200 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "500" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "500" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": "stellar_asset", + "storage": [ + { + "key": { + "symbol": "METADATA" + }, + "val": { + "map": [ + { + "key": { + "symbol": "decimal" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "name" + }, + "val": { + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 120960 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/apps/onchain/test_snapshots/test/test_double_confirm_delivery.1.json b/apps/onchain/test_snapshots/test/test_double_confirm_delivery.1.json index 9ac0d66..b50d48a 100644 --- a/apps/onchain/test_snapshots/test/test_double_confirm_delivery.1.json +++ b/apps/onchain/test_snapshots/test/test_double_confirm_delivery.1.json @@ -65,6 +65,9 @@ { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + }, { "vec": [ { @@ -102,33 +105,59 @@ ] }, { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "u64": "1706400000" } ] } }, - "sub_invocations": [ - { - "function": { - "contract_fn": { - "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", - "function_name": "transfer", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - }, - { - "i128": "1000" - } - ] + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "approve", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": "1000" + }, + { + "u32": 200 } - }, - "sub_invocations": [] + ] } - ] + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "deposit_funds", + "args": [ + { + "u64": "10" + } + ] + } + }, + "sub_invocations": [] } ] ], @@ -230,6 +259,14 @@ "durability": "persistent", "val": { "map": [ + { + "key": { + "symbol": "deadline" + }, + "val": { + "u64": "1706400000" + } + }, { "key": { "symbol": "depositor" @@ -287,6 +324,18 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "None" + } + ] + } + }, { "key": { "symbol": "status" @@ -301,7 +350,7 @@ }, { "key": { - "symbol": "token" + "symbol": "token_address" }, "val": { "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" @@ -374,6 +423,46 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "2032731177588607455" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "4270020994084947596" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -414,6 +503,67 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Allowance" + }, + { + "map": [ + { + "key": { + "symbol": "from" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "spender" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + ] + } + ] + }, + "durability": "temporary", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "live_until_ledger" + }, + "val": { + "u32": 200 + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 200 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_double_deposit_rejected.1.json b/apps/onchain/test_snapshots/test/test_double_deposit_rejected.1.json index 7a31f1e..d4fbd29 100644 --- a/apps/onchain/test_snapshots/test/test_double_deposit_rejected.1.json +++ b/apps/onchain/test_snapshots/test/test_double_deposit_rejected.1.json @@ -106,9 +106,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -304,22 +301,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Active" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Active" + } + ] } }, { diff --git a/apps/onchain/test_snapshots/test/test_double_release.1.json b/apps/onchain/test_snapshots/test/test_double_release.1.json index 9ad23e8..305f8a9 100644 --- a/apps/onchain/test_snapshots/test/test_double_release.1.json +++ b/apps/onchain/test_snapshots/test/test_double_release.1.json @@ -128,9 +128,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" } ] } @@ -200,9 +197,6 @@ }, { "u32": 0 - }, - { - "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" } ] } @@ -351,22 +345,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Active" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" + "vec": [ + { + "symbol": "Active" + } + ] } }, { diff --git a/apps/onchain/test_snapshots/test/test_duplicate_escrow_id.1.json b/apps/onchain/test_snapshots/test/test_duplicate_escrow_id.1.json index 986fb37..d9a2c36 100644 --- a/apps/onchain/test_snapshots/test/test_duplicate_escrow_id.1.json +++ b/apps/onchain/test_snapshots/test/test_duplicate_escrow_id.1.json @@ -25,6 +25,28 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", @@ -84,9 +106,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -235,22 +254,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Created" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Created" + } + ] } }, { @@ -315,6 +338,26 @@ "contract_data": { "ext": "v0", "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { "nonce": "5541220902715666415" @@ -328,6 +371,58 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_invalid_milestone_amount.1.json b/apps/onchain/test_snapshots/test/test_invalid_milestone_amount.1.json index bdfa9c6..e086a8c 100644 --- a/apps/onchain/test_snapshots/test/test_invalid_milestone_amount.1.json +++ b/apps/onchain/test_snapshots/test/test_invalid_milestone_amount.1.json @@ -25,6 +25,28 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [] ], "ledger": { @@ -101,6 +123,78 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_negative_amount_milestone_rejected.1.json b/apps/onchain/test_snapshots/test/test_negative_amount_milestone_rejected.1.json index bdfa9c6..e086a8c 100644 --- a/apps/onchain/test_snapshots/test/test_negative_amount_milestone_rejected.1.json +++ b/apps/onchain/test_snapshots/test/test_negative_amount_milestone_rejected.1.json @@ -25,6 +25,28 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [] ], "ledger": { @@ -101,6 +123,78 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_release_milestone.1.json b/apps/onchain/test_snapshots/test/test_release_milestone.1.json index 0edd23b..fcf3dfc 100644 --- a/apps/onchain/test_snapshots/test/test_release_milestone.1.json +++ b/apps/onchain/test_snapshots/test/test_release_milestone.1.json @@ -351,6 +351,18 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "None" + } + ] + } + }, { "key": { "symbol": "status" diff --git a/apps/onchain/test_snapshots/test/test_release_milestone_before_deposit.1.json b/apps/onchain/test_snapshots/test/test_release_milestone_before_deposit.1.json index 5f16a11..f98b522 100644 --- a/apps/onchain/test_snapshots/test/test_release_milestone_before_deposit.1.json +++ b/apps/onchain/test_snapshots/test/test_release_milestone_before_deposit.1.json @@ -84,9 +84,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -235,22 +232,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Created" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Created" + } + ] } }, { diff --git a/apps/onchain/test_snapshots/test/test_release_milestone_with_tokens.1.json b/apps/onchain/test_snapshots/test/test_release_milestone_with_tokens.1.json index c7f1482..400c079 100644 --- a/apps/onchain/test_snapshots/test/test_release_milestone_with_tokens.1.json +++ b/apps/onchain/test_snapshots/test/test_release_milestone_with_tokens.1.json @@ -1,6 +1,6 @@ { "generators": { - "address": 5, + "address": 6, "nonce": 0, "mux_id": 0 }, @@ -8,11 +8,33 @@ [], [ [ - "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", { "function": { "contract_fn": { - "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": "0" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF", + { + "function": { + "contract_fn": { + "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", "function_name": "set_admin", "args": [ { @@ -31,7 +53,7 @@ { "function": { "contract_fn": { - "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", "function_name": "mint", "args": [ { @@ -66,7 +88,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" }, { "vec": [ @@ -138,9 +160,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -155,7 +174,7 @@ { "function": { "contract_fn": { - "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", "function_name": "approve", "args": [ { @@ -205,16 +224,13 @@ "function": { "contract_fn": { "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "confirm_delivery", + "function_name": "release_milestone", "args": [ { "u64": "3" }, { "u32": 0 - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" } ] } @@ -225,6 +241,8 @@ ], [], [], + [], + [], [] ], "ledger": { @@ -242,7 +260,7 @@ "last_modified_ledger_seq": 0, "data": { "account": { - "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF", "balance": "0", "seq_num": "0", "num_sub_entries": 0, @@ -264,10 +282,10 @@ "data": { "contract_data": { "ext": "v0", - "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF", "key": { "ledger_key_nonce": { - "nonce": "801925984706572462" + "nonce": "5541220902715666415" } }, "durability": "temporary", @@ -397,22 +415,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Active" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Active" + } + ] } }, { @@ -420,7 +442,7 @@ "symbol": "token_address" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" } }, { @@ -461,7 +483,24 @@ "executable": { "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, - "storage": null + "storage": [ + { + "key": { + "symbol": "fee_bps" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "treasury" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] } } } @@ -479,7 +518,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": "1033654523790656264" + "nonce": "2032731177588607455" } }, "durability": "temporary", @@ -499,7 +538,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": "2032731177588607455" + "nonce": "4270020994084947596" } }, "durability": "temporary", @@ -519,7 +558,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": "4270020994084947596" + "nonce": "4837995959683129791" } }, "durability": "temporary", @@ -539,7 +578,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": "4837995959683129791" + "nonce": "8370022561469687789" } }, "durability": "temporary", @@ -559,7 +598,27 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { - "nonce": "5541220902715666415" + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" } }, "durability": "temporary", @@ -576,7 +635,7 @@ "data": { "contract_data": { "ext": "v0", - "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", "key": { "vec": [ { @@ -637,7 +696,7 @@ "data": { "contract_data": { "ext": "v0", - "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", "key": { "vec": [ { @@ -689,7 +748,7 @@ "data": { "contract_data": { "ext": "v0", - "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", "key": { "vec": [ { @@ -741,7 +800,7 @@ "data": { "contract_data": { "ext": "v0", - "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", "key": { "vec": [ { @@ -793,7 +852,7 @@ "data": { "contract_data": { "ext": "v0", - "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", "key": "ledger_key_contract_instance", "durability": "persistent", "val": { @@ -819,7 +878,7 @@ "symbol": "name" }, "val": { - "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF" } }, { @@ -873,7 +932,7 @@ "symbol": "issuer" }, "val": { - "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + "bytes": "0000000000000000000000000000000000000000000000000000000000000006" } } ] diff --git a/apps/onchain/test_snapshots/test/test_self_dealing_rejected.1.json b/apps/onchain/test_snapshots/test/test_self_dealing_rejected.1.json index 6e9e5e7..067c345 100644 --- a/apps/onchain/test_snapshots/test/test_self_dealing_rejected.1.json +++ b/apps/onchain/test_snapshots/test/test_self_dealing_rejected.1.json @@ -25,6 +25,28 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [] ], "ledger": { @@ -101,6 +123,78 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_too_many_milestones.1.json b/apps/onchain/test_snapshots/test/test_too_many_milestones.1.json index bdfa9c6..e086a8c 100644 --- a/apps/onchain/test_snapshots/test/test_too_many_milestones.1.json +++ b/apps/onchain/test_snapshots/test/test_too_many_milestones.1.json @@ -25,6 +25,28 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [] ], "ledger": { @@ -101,6 +123,78 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_unauthorized_confirm_delivery.1.json b/apps/onchain/test_snapshots/test/test_unauthorized_confirm_delivery.1.json index 1cb8f5e..9eadc48 100644 --- a/apps/onchain/test_snapshots/test/test_unauthorized_confirm_delivery.1.json +++ b/apps/onchain/test_snapshots/test/test_unauthorized_confirm_delivery.1.json @@ -65,6 +65,9 @@ { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, + { + "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" + }, { "vec": [ { @@ -102,33 +105,59 @@ ] }, { - "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" + "u64": "1706400000" } ] } }, - "sub_invocations": [ - { - "function": { - "contract_fn": { - "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", - "function_name": "transfer", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - }, - { - "i128": "1000" - } - ] + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", + "function_name": "approve", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "i128": "1000" + }, + { + "u32": 200 } - }, - "sub_invocations": [] + ] } - ] + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "deposit_funds", + "args": [ + { + "u64": "9" + } + ] + } + }, + "sub_invocations": [] } ] ], @@ -205,6 +234,14 @@ "durability": "persistent", "val": { "map": [ + { + "key": { + "symbol": "deadline" + }, + "val": { + "u64": "1706400000" + } + }, { "key": { "symbol": "depositor" @@ -262,6 +299,18 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } }, + { + "key": { + "symbol": "resolution" + }, + "val": { + "vec": [ + { + "symbol": "None" + } + ] + } + }, { "key": { "symbol": "status" @@ -276,7 +325,7 @@ }, { "key": { - "symbol": "token" + "symbol": "token_address" }, "val": { "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" @@ -349,6 +398,46 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "2032731177588607455" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "4837995959683129791" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, { "entry": { "last_modified_ledger_seq": 0, @@ -369,6 +458,67 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN", + "key": { + "vec": [ + { + "symbol": "Allowance" + }, + { + "map": [ + { + "key": { + "symbol": "from" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "spender" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + } + ] + } + ] + }, + "durability": "temporary", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "live_until_ledger" + }, + "val": { + "u32": 200 + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 200 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_valid_escrow_creation_succeeds.1.json b/apps/onchain/test_snapshots/test/test_valid_escrow_creation_succeeds.1.json index 5136bab..13e01d7 100644 --- a/apps/onchain/test_snapshots/test/test_valid_escrow_creation_succeeds.1.json +++ b/apps/onchain/test_snapshots/test/test_valid_escrow_creation_succeeds.1.json @@ -25,6 +25,28 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", @@ -116,9 +138,6 @@ }, { "u64": "1706400000" - }, - { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" } ] } @@ -299,22 +318,26 @@ }, { "key": { - "symbol": "status" + "symbol": "resolution" }, "val": { "vec": [ { - "symbol": "Created" + "symbol": "None" } ] } }, { "key": { - "symbol": "token" + "symbol": "status" }, "val": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "symbol": "Created" + } + ] } }, { @@ -379,6 +402,26 @@ "contract_data": { "ext": "v0", "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { "nonce": "5541220902715666415" @@ -392,6 +435,58 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/apps/onchain/test_snapshots/test/test_zero_amount_milestone_rejected.1.json b/apps/onchain/test_snapshots/test/test_zero_amount_milestone_rejected.1.json index bdfa9c6..e086a8c 100644 --- a/apps/onchain/test_snapshots/test/test_zero_amount_milestone_rejected.1.json +++ b/apps/onchain/test_snapshots/test/test_zero_amount_milestone_rejected.1.json @@ -25,6 +25,28 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [] ], "ledger": { @@ -101,6 +123,78 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": { + "vec": [ + { + "symbol": "Balance" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "authorized" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "clawback" + }, + "val": { + "bool": false + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 518400 + }, { "entry": { "last_modified_ledger_seq": 0,