diff --git a/packages/circle/src/tests/test_integration.rs b/packages/circle/src/tests/test_integration.rs index a1d50f7..842434d 100644 --- a/packages/circle/src/tests/test_integration.rs +++ b/packages/circle/src/tests/test_integration.rs @@ -1,7 +1,7 @@ #![cfg(test)] use soroban_sdk::testutils::Address as _; -use soroban_sdk::{Address, BytesN, Env, String, Vec}; +use soroban_sdk::{Address, Env, String}; /// Integration test: factory deploys circle -> members join -> contribute -> trigger payout -> fee sent to treasury /// This test is currently a stub due to circular dependencies between contracts in the test environment. diff --git a/packages/escrow-swap/src/contract.rs b/packages/escrow-swap/src/contract.rs index 836055d..cb4119c 100644 --- a/packages/escrow-swap/src/contract.rs +++ b/packages/escrow-swap/src/contract.rs @@ -1,4 +1,4 @@ -use soroban_sdk::{token::Client as TokenClient, Address, BytesN, Env, Vec}; +use soroban_sdk::{token::Client as TokenClient, Address, BytesN, Env, Map, Vec}; use crate::types::*; use common::pause; @@ -12,36 +12,11 @@ pub fn init(env: &Env, admin: &Address) -> Result<(), EscrowError> { } env.storage().instance().set(&DataKey::Admin, admin); env.storage().instance().set(&DataKey::NextSwapId, &0u64); - env.storage().persistent().set(&DataKey::SwapRequests, &Vec::::new(env)); + env.storage().persistent().set(&DataKey::SwapRequests, &Map::::new(env)); Ok(()) } /// Creates a new escrow swap between two parties. -/// -/// # Arguments -/// * `env` - The contract environment -/// * `initiator` - The address creating the swap -/// * `responder` - The address expected to accept the swap -/// * `token_a` - The token address deposited by the initiator -/// * `token_b` - The token address to be deposited by the responder -/// * `initiator_amount` - Amount of token_a to deposit (must be positive) -/// * `responder_amount` - Amount of token_b the responder must deposit (must be positive) -/// * `hash_lock` - SHA-256 hash of the secret that will be required to accept the swap -/// * `time_lock` - Unix timestamp deadline for accepting the swap (must be in the future) -/// -/// # Returns -/// * `Ok(u64)` with the new swap ID if successful -/// * `Err(EscrowError)` if any validation fails -/// -/// # Validation -/// * initiator and responder must be different addresses -/// * initiator_amount and responder_amount must be positive -/// * time_lock must be strictly greater than current timestamp (deadline is exclusive for creation) -/// * The contract must not be paused -/// -/// # Deadline Semantics -/// The deadline for creation is exclusive: `time_lock <= now` is rejected. -/// This means the swap must have a future deadline at creation time. pub fn create_swap( env: &Env, initiator: &Address, @@ -84,8 +59,8 @@ pub fn create_swap( created_at: now, }; - let mut swaps: Vec = env.storage().persistent().get(&DataKey::SwapRequests).unwrap_or_else(|| Vec::new(env)); - swaps.push_back(swap); + let mut swaps: Map = env.storage().persistent().get(&DataKey::SwapRequests).unwrap_or_else(|| Map::new(env)); + swaps.set(next_id, swap); env.storage().persistent().set(&DataKey::SwapRequests, &swaps); env.storage().instance().set(&DataKey::NextSwapId, &next_id.checked_add(1).ok_or(EscrowError::InvalidAmount)?); @@ -107,69 +82,37 @@ pub fn create_swap( } /// Accepts a pending swap by providing the secret that matches the hash lock. -/// -/// # Arguments -/// * `env` - The contract environment -/// * `id` - The swap ID to accept -/// * `responder` - The address of the responder accepting the swap (must match the swap's responder) -/// * `secret` - The secret that produces the hash lock when hashed with SHA-256 -/// -/// # Returns -/// * `Ok(())` if the swap was successfully accepted -/// * `Err(EscrowError)` if any validation fails -/// -/// # Validation -/// * The swap must be in PENDING status -/// * The caller must be the swap's responder -/// * The provided secret must match the swap's hash lock -/// * The current timestamp must be strictly before the swap's time_lock (deadline is inclusive) -/// * The contract must not be paused -/// -/// # Deadline Semantics -/// The deadline is inclusive: acceptance is rejected if `now >= time_lock`. -/// This means the swap cannot be accepted at or after the exact deadline timestamp. pub fn accept_swap(env: &Env, id: u64, responder: &Address, secret: BytesN<32>) -> Result<(), EscrowError> { pause::when_not_paused(env).map_err(|_| EscrowError::ContractPaused)?; let _guard = common::reentrancy::ReentrancyGuard::new(env).map_err(|_| EscrowError::NotInitialized)?; responder.require_auth(); - let mut swaps: Vec = env.storage().persistent().get(&DataKey::SwapRequests).ok_or(EscrowError::NotInitialized)?; - let mut found = false; + let mut swaps: Map = env.storage().persistent().get(&DataKey::SwapRequests).ok_or(EscrowError::NotInitialized)?; + let mut s = swaps.get(id).ok_or(EscrowError::SwapNotFound)?; - for i in 0..swaps.len() { - let mut s = swaps.get(i).ok_or(EscrowError::VecAccessError)?; - if s.id == id { - if s.status != STATUS_PENDING { - return Err(EscrowError::SwapNotActive); - } - if s.responder != *responder { - return Err(EscrowError::Unauthorized); - } - let secret_bytes = soroban_sdk::Bytes::from_array(env, &secret.to_array()); - let computed_hash: BytesN<32> = env.crypto().sha256(&secret_bytes).into(); - if computed_hash != s.hash_lock { - return Err(EscrowError::HashLockMismatch); - } - let now = env.ledger().timestamp(); - if now >= s.time_lock { - return Err(EscrowError::TimeLockExpired); - } - - s.status = STATUS_ACTIVE; - swaps.set(i, s.clone()); - found = true; + if s.status != STATUS_PENDING { + return Err(EscrowError::SwapNotActive); + } + if s.responder != *responder { + return Err(EscrowError::Unauthorized); + } + let secret_bytes = soroban_sdk::Bytes::from_array(env, &secret.to_array()); + let computed_hash: BytesN<32> = env.crypto().sha256(&secret_bytes).into(); + if computed_hash != s.hash_lock { + return Err(EscrowError::HashLockMismatch); + } + let now = env.ledger().timestamp(); + if now >= s.time_lock { + return Err(EscrowError::TimeLockExpired); + } - let token_b_client = TokenClient::new(env, &s.token_b); - token_b_client.transfer(responder, &env.current_contract_address(), &s.responder_amount); + s.status = STATUS_ACTIVE; + swaps.set(id, s.clone()); - SwapAccepted { id, responder: responder.clone() }.publish(env); - break; - } - } + let token_b_client = TokenClient::new(env, &s.token_b); + token_b_client.transfer(responder, &env.current_contract_address(), &s.responder_amount); - if !found { - return Err(EscrowError::SwapNotFound); - } + SwapAccepted { id, responder: responder.clone() }.publish(env); env.storage().persistent().set(&DataKey::SwapRequests, &swaps); Ok(()) } @@ -179,36 +122,25 @@ pub fn complete_swap(env: &Env, id: u64, caller: &Address) -> Result<(), EscrowE let _guard = common::reentrancy::ReentrancyGuard::new(env).map_err(|_| EscrowError::NotInitialized)?; caller.require_auth(); - let mut swaps: Vec = env.storage().persistent().get(&DataKey::SwapRequests).ok_or(EscrowError::NotInitialized)?; - let mut found = false; - - for i in 0..swaps.len() { - let mut s = swaps.get(i).ok_or(EscrowError::VecAccessError)?; - if s.id == id { - if s.status != STATUS_ACTIVE { - return Err(EscrowError::SwapNotActive); - } - if *caller != s.initiator && *caller != s.responder { - return Err(EscrowError::Unauthorized); - } - s.status = STATUS_COMPLETED; - swaps.set(i, s.clone()); - found = true; + let mut swaps: Map = env.storage().persistent().get(&DataKey::SwapRequests).ok_or(EscrowError::NotInitialized)?; + let mut s = swaps.get(id).ok_or(EscrowError::SwapNotFound)?; - let token_a_client = TokenClient::new(env, &s.token_a); - token_a_client.transfer(&env.current_contract_address(), &s.responder, &s.initiator_amount); + if s.status != STATUS_ACTIVE { + return Err(EscrowError::SwapNotActive); + } + if *caller != s.initiator && *caller != s.responder { + return Err(EscrowError::Unauthorized); + } + s.status = STATUS_COMPLETED; + swaps.set(id, s.clone()); - let token_b_client = TokenClient::new(env, &s.token_b); - token_b_client.transfer(&env.current_contract_address(), &s.initiator, &s.responder_amount); + let token_a_client = TokenClient::new(env, &s.token_a); + token_a_client.transfer(&env.current_contract_address(), &s.responder, &s.initiator_amount); - SwapCompleted { id, initiator: s.initiator.clone(), responder: s.responder.clone() }.publish(env); - break; - } - } + let token_b_client = TokenClient::new(env, &s.token_b); + token_b_client.transfer(&env.current_contract_address(), &s.initiator, &s.responder_amount); - if !found { - return Err(EscrowError::SwapNotFound); - } + SwapCompleted { id, initiator: s.initiator.clone(), responder: s.responder.clone() }.publish(env); env.storage().persistent().set(&DataKey::SwapRequests, &swaps); Ok(()) } @@ -218,58 +150,41 @@ pub fn cancel_swap(env: &Env, id: u64, caller: &Address) -> Result<(), EscrowErr let _guard = common::reentrancy::ReentrancyGuard::new(env).map_err(|_| EscrowError::NotInitialized)?; caller.require_auth(); - let mut swaps: Vec = env.storage().persistent().get(&DataKey::SwapRequests).ok_or(EscrowError::NotInitialized)?; - let mut found = false; - - for i in 0..swaps.len() { - let mut s = swaps.get(i).ok_or(EscrowError::VecAccessError)?; - if s.id == id { - if s.status == STATUS_COMPLETED || s.status == STATUS_CANCELLED { - return Err(EscrowError::SwapNotActive); - } - if *caller != s.initiator && *caller != s.responder { - return Err(EscrowError::Unauthorized); - } - - let previous_status = s.status; - s.status = STATUS_CANCELLED; - swaps.set(i, s.clone()); - found = true; + let mut swaps: Map = env.storage().persistent().get(&DataKey::SwapRequests).ok_or(EscrowError::NotInitialized)?; + let mut s = swaps.get(id).ok_or(EscrowError::SwapNotFound)?; - let token_a_client = TokenClient::new(env, &s.token_a); - token_a_client.transfer(&env.current_contract_address(), &s.initiator, &s.initiator_amount); + if s.status == STATUS_COMPLETED || s.status == STATUS_CANCELLED { + return Err(EscrowError::SwapNotActive); + } + if *caller != s.initiator && *caller != s.responder { + return Err(EscrowError::Unauthorized); + } + + let previous_status = s.status; + s.status = STATUS_CANCELLED; + swaps.set(id, s.clone()); - if previous_status == STATUS_ACTIVE { - let token_b_client = TokenClient::new(env, &s.token_b); - token_b_client.transfer(&env.current_contract_address(), &s.responder, &s.responder_amount); - } + let token_a_client = TokenClient::new(env, &s.token_a); + token_a_client.transfer(&env.current_contract_address(), &s.initiator, &s.initiator_amount); - SwapCancelled { id }.publish(env); - break; - } + if previous_status == STATUS_ACTIVE { + let token_b_client = TokenClient::new(env, &s.token_b); + token_b_client.transfer(&env.current_contract_address(), &s.responder, &s.responder_amount); } - if !found { - return Err(EscrowError::SwapNotFound); - } + SwapCancelled { id }.publish(env); env.storage().persistent().set(&DataKey::SwapRequests, &swaps); Ok(()) } pub fn get_swap(env: &Env, id: u64) -> Result { - let swaps: Vec = env.storage().persistent().get(&DataKey::SwapRequests).ok_or(EscrowError::NotInitialized)?; - for i in 0..swaps.len() { - if let Some(s) = swaps.get(i) { - if s.id == id { - return Ok(s); - } - } - } - Err(EscrowError::SwapNotFound) + let swaps: Map = env.storage().persistent().get(&DataKey::SwapRequests).ok_or(EscrowError::NotInitialized)?; + swaps.get(id).ok_or(EscrowError::SwapNotFound) } pub fn get_swaps(env: &Env) -> Vec { - env.storage().persistent().get(&DataKey::SwapRequests).unwrap_or_else(|| Vec::new(env)) + let swaps: Map = env.storage().persistent().get(&DataKey::SwapRequests).unwrap_or_else(|| Map::new(env)); + swaps.values() } pub fn pause(env: &Env, admin: &Address) -> Result<(), EscrowError> { diff --git a/packages/escrow-swap/test_snapshots/test/tests/test_create_swap.1.json b/packages/escrow-swap/test_snapshots/test/tests/test_create_swap.1.json index b4d25b7..7821063 100644 --- a/packages/escrow-swap/test_snapshots/test/tests/test_create_swap.1.json +++ b/packages/escrow-swap/test_snapshots/test/tests/test_create_swap.1.json @@ -316,98 +316,103 @@ }, "durability": "persistent", "val": { - "vec": [ + "map": [ { - "map": [ - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "hash_lock" + "key": { + "u64": "0" + }, + "val": { + "map": [ + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": "0" + } }, - "val": { - "bytes": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" - } - }, - { - "key": { - "symbol": "id" + { + "key": { + "symbol": "hash_lock" + }, + "val": { + "bytes": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" + } }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "initiator" + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "0" + } }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "symbol": "initiator_amount" + { + "key": { + "symbol": "initiator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } }, - "val": { - "i128": "1000000000" - } - }, - { - "key": { - "symbol": "responder" + { + "key": { + "symbol": "initiator_amount" + }, + "val": { + "i128": "1000000000" + } }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "symbol": "responder_amount" + { + "key": { + "symbol": "responder" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } }, - "val": { - "i128": "2000000000" - } - }, - { - "key": { - "symbol": "status" + { + "key": { + "symbol": "responder_amount" + }, + "val": { + "i128": "2000000000" + } }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "time_lock" + { + "key": { + "symbol": "status" + }, + "val": { + "u32": 0 + } }, - "val": { - "u64": "3600" - } - }, - { - "key": { - "symbol": "token_a" + { + "key": { + "symbol": "time_lock" + }, + "val": { + "u64": "3600" + } }, - "val": { - "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" - } - }, - { - "key": { - "symbol": "token_b" + { + "key": { + "symbol": "token_a" + }, + "val": { + "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" + } }, - "val": { - "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + { + "key": { + "symbol": "token_b" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } } - } - ] + ] + } } ] } diff --git a/packages/escrow-swap/test_snapshots/test/tests/test_create_swap_invalid_amount.1.json b/packages/escrow-swap/test_snapshots/test/tests/test_create_swap_invalid_amount.1.json index 5af3325..9adb938 100644 --- a/packages/escrow-swap/test_snapshots/test/tests/test_create_swap_invalid_amount.1.json +++ b/packages/escrow-swap/test_snapshots/test/tests/test_create_swap_invalid_amount.1.json @@ -194,7 +194,7 @@ }, "durability": "persistent", "val": { - "vec": [] + "map": [] } } }, diff --git a/packages/escrow-swap/test_snapshots/test/tests/test_create_swap_self_referral.1.json b/packages/escrow-swap/test_snapshots/test/tests/test_create_swap_self_referral.1.json index 8dd75c1..11101c5 100644 --- a/packages/escrow-swap/test_snapshots/test/tests/test_create_swap_self_referral.1.json +++ b/packages/escrow-swap/test_snapshots/test/tests/test_create_swap_self_referral.1.json @@ -194,7 +194,7 @@ }, "durability": "persistent", "val": { - "vec": [] + "map": [] } } }, diff --git a/packages/escrow-swap/test_snapshots/test/tests/test_get_swaps.1.json b/packages/escrow-swap/test_snapshots/test/tests/test_get_swaps.1.json index 57b5a49..8a6771a 100644 --- a/packages/escrow-swap/test_snapshots/test/tests/test_get_swaps.1.json +++ b/packages/escrow-swap/test_snapshots/test/tests/test_get_swaps.1.json @@ -317,98 +317,103 @@ }, "durability": "persistent", "val": { - "vec": [ + "map": [ { - "map": [ - { - "key": { - "symbol": "created_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "hash_lock" + "key": { + "u64": "0" + }, + "val": { + "map": [ + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": "0" + } }, - "val": { - "bytes": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" - } - }, - { - "key": { - "symbol": "id" + { + "key": { + "symbol": "hash_lock" + }, + "val": { + "bytes": "72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793" + } }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "initiator" + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "0" + } }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - }, - { - "key": { - "symbol": "initiator_amount" + { + "key": { + "symbol": "initiator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } }, - "val": { - "i128": "1000000000" - } - }, - { - "key": { - "symbol": "responder" + { + "key": { + "symbol": "initiator_amount" + }, + "val": { + "i128": "1000000000" + } }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - }, - { - "key": { - "symbol": "responder_amount" + { + "key": { + "symbol": "responder" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } }, - "val": { - "i128": "2000000000" - } - }, - { - "key": { - "symbol": "status" + { + "key": { + "symbol": "responder_amount" + }, + "val": { + "i128": "2000000000" + } }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "time_lock" + { + "key": { + "symbol": "status" + }, + "val": { + "u32": 0 + } }, - "val": { - "u64": "3600" - } - }, - { - "key": { - "symbol": "token_a" + { + "key": { + "symbol": "time_lock" + }, + "val": { + "u64": "3600" + } }, - "val": { - "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" - } - }, - { - "key": { - "symbol": "token_b" + { + "key": { + "symbol": "token_a" + }, + "val": { + "address": "CBUSYNQKASUYFWYC3M2GUEDMX4AIVWPALDBYJPNK6554BREHTGZ2IUNF" + } }, - "val": { - "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + { + "key": { + "symbol": "token_b" + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } } - } - ] + ] + } } ] } diff --git a/packages/reputation-registry/src/scoring.rs b/packages/reputation-registry/src/scoring.rs index 631414e..2a99bc5 100644 --- a/packages/reputation-registry/src/scoring.rs +++ b/packages/reputation-registry/src/scoring.rs @@ -69,6 +69,8 @@ pub fn qualifies_for_circle(env: &Env, member: &Address, min_score: u32, require /// Record an on-time payment. Returns the new MoiScore. pub fn record_on_time_payment(env: &Env, member: &Address, circle_id: &Address, amount: i128, round: u32) -> u32 { + assert!(amount >= 0, "amount must be non-negative"); + let safe_amount = amount.max(0); let current = storage::get_score(env, member); let mut streak = storage::get_streak(env, member, circle_id); let last_round = storage::get_last_round(env, member, circle_id); @@ -84,7 +86,7 @@ pub fn record_on_time_payment(env: &Env, member: &Address, circle_id: &Address, let base: u32 = 10; let streak_bonus: u32 = if streak <= 10 { streak * 5 } else { 50 }; - let volume_bonus_raw = (amount / 100_0000000) as u32; // 1 point per 100 USDC + let volume_bonus_raw = (safe_amount / 100_0000000) as u32; // 1 point per 100 USDC let volume_bonus: u32 = if volume_bonus_raw > 20 { 20 } else { volume_bonus_raw }; let new_score = current.saturating_add(base).saturating_add(streak_bonus).saturating_add(volume_bonus); diff --git a/packages/reputation-registry/src/storage.rs b/packages/reputation-registry/src/storage.rs index 56cf182..c5bff85 100644 --- a/packages/reputation-registry/src/storage.rs +++ b/packages/reputation-registry/src/storage.rs @@ -21,7 +21,7 @@ pub fn get_streak(env: &Env, member: &Address, circle_id: &Address) -> u32 { /// Increment the streak count pub fn increment_streak(env: &Env, member: &Address, circle_id: &Address) { let current = get_streak(env, member, circle_id); - env.storage().persistent().set(&DataKey::Streak(member.clone(), circle_id.clone()), &(current + 1)); + env.storage().persistent().set(&DataKey::Streak(member.clone(), circle_id.clone()), ¤t.saturating_add(1)); } /// Get number of completed circles @@ -33,7 +33,7 @@ pub fn get_completions(env: &Env, member: &Address) -> u32 { /// Increment completions pub fn increment_completions(env: &Env, member: &Address) { let current = get_completions(env, member); - env.storage().persistent().set(&DataKey::Completions(member.clone()), &(current + 1)); + env.storage().persistent().set(&DataKey::Completions(member.clone()), ¤t.saturating_add(1)); } /// Get number of defaults @@ -45,7 +45,7 @@ pub fn get_defaults(env: &Env, member: &Address) -> u32 { /// Increment defaults pub fn increment_defaults(env: &Env, member: &Address) { let current = get_defaults(env, member); - env.storage().persistent().set(&DataKey::Defaults(member.clone()), &(current + 1)); + env.storage().persistent().set(&DataKey::Defaults(member.clone()), ¤t.saturating_add(1)); } /// Add an activity record diff --git a/packages/reputation-registry/src/test.rs b/packages/reputation-registry/src/test.rs index 51506ac..984efcc 100644 --- a/packages/reputation-registry/src/test.rs +++ b/packages/reputation-registry/src/test.rs @@ -209,3 +209,34 @@ fn test_pause_blocks_get_score() { client.unpause_registry(&admin); assert!(client.try_get_score(&user).is_ok()); } + +#[test] +fn test_storage_increment_saturating() { + let env = Env::default(); + let contract_id = env.register(ReputationRegistry, ()); + let member = Address::generate(&env); + let circle_id = Address::generate(&env); + + env.as_contract(&contract_id, || { + env.storage().persistent().set(&crate::types::DataKey::Streak(member.clone(), circle_id.clone()), &u32::MAX); + crate::storage::increment_streak(&env, &member, &circle_id); + assert_eq!(crate::storage::get_streak(&env, &member, &circle_id), u32::MAX); + + env.storage().persistent().set(&crate::types::DataKey::Completions(member.clone()), &u32::MAX); + crate::storage::increment_completions(&env, &member); + assert_eq!(crate::storage::get_completions(&env, &member), u32::MAX); + + env.storage().persistent().set(&crate::types::DataKey::Defaults(member.clone()), &u32::MAX); + crate::storage::increment_defaults(&env, &member); + assert_eq!(crate::storage::get_defaults(&env, &member), u32::MAX); + }); +} + +#[test] +#[should_panic(expected = "amount must be non-negative")] +fn test_record_on_time_payment_negative_amount_panics() { + let env = Env::default(); + let member = Address::generate(&env); + let circle_id = Address::generate(&env); + crate::scoring::record_on_time_payment(&env, &member, &circle_id, -100_0000000i128, 1); +} diff --git a/packages/reputation-registry/test_snapshots/test/test_activity_emits_event.1.json b/packages/reputation-registry/test_snapshots/test/test_activity_emits_event.1.json index f477b21..4d1bd98 100644 --- a/packages/reputation-registry/test_snapshots/test/test_activity_emits_event.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_activity_emits_event.1.json @@ -71,68 +71,10 @@ "key": { "vec": [ { - "symbol": "Activity" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "activity_type" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "score_impact" - }, - "val": { - "u32": 100 - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "symbol": "Score" + }, { - "symbol": "Scores" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } ] }, @@ -219,6 +161,100 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "activity_type" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "score_impact" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "timestamp" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/reputation-registry/test_snapshots/test/test_default_resets_streak.1.json b/packages/reputation-registry/test_snapshots/test/test_default_resets_streak.1.json index 9954f94..833b876 100644 --- a/packages/reputation-registry/test_snapshots/test/test_default_resets_streak.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_default_resets_streak.1.json @@ -123,7 +123,140 @@ "key": { "vec": [ { - "symbol": "Activity" + "symbol": "Score" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completed_circles" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "defaulted_circles" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "last_activity_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "score" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "streak_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "tier" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_circles" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "updated_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 3 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 0 } ] }, @@ -246,103 +379,6 @@ }, "live_until": 4095 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Scores" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "completed_circles" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "defaulted_circles" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "last_activity_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "score" - }, - "val": { - "u32": 200 - } - }, - { - "key": { - "symbol": "streak_count" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "tier" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "total_circles" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "updated_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/reputation-registry/test_snapshots/test/test_get_history_filters_by_user.1.json b/packages/reputation-registry/test_snapshots/test/test_get_history_filters_by_user.1.json index b4ec8d2..ff3a97c 100644 --- a/packages/reputation-registry/test_snapshots/test/test_get_history_filters_by_user.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_get_history_filters_by_user.1.json @@ -123,7 +123,267 @@ "key": { "vec": [ { - "symbol": "Activity" + "symbol": "Score" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completed_circles" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "defaulted_circles" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "last_activity_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "score" + }, + "val": { + "u32": 300 + } + }, + { + "key": { + "symbol": "streak_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "tier" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_circles" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "updated_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Score" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completed_circles" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "defaulted_circles" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "last_activity_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "score" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "streak_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "tier" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_circles" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "updated_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 2 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 0 } ] }, @@ -173,7 +433,7 @@ "symbol": "activity_type" }, "val": { - "u32": 1 + "u32": 2 } }, { @@ -181,7 +441,7 @@ "symbol": "score_impact" }, "val": { - "u32": 50 + "u32": 200 } }, { @@ -197,11 +457,42 @@ "symbol": "user" }, "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } } ] + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ { "map": [ { @@ -209,7 +500,7 @@ "symbol": "activity_type" }, "val": { - "u32": 2 + "u32": 1 } }, { @@ -217,7 +508,7 @@ "symbol": "score_impact" }, "val": { - "u32": 200 + "u32": 50 } }, { @@ -233,7 +524,7 @@ "symbol": "user" }, "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" } } ] @@ -246,103 +537,6 @@ }, "live_until": 4095 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Scores" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "completed_circles" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "defaulted_circles" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "last_activity_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "score" - }, - "val": { - "u32": 350 - } - }, - { - "key": { - "symbol": "streak_count" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "tier" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "total_circles" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "updated_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/reputation-registry/test_snapshots/test/test_multiple_activities_accumulate.1.json b/packages/reputation-registry/test_snapshots/test/test_multiple_activities_accumulate.1.json index 080d7a9..cfffc8c 100644 --- a/packages/reputation-registry/test_snapshots/test/test_multiple_activities_accumulate.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_multiple_activities_accumulate.1.json @@ -122,7 +122,140 @@ "key": { "vec": [ { - "symbol": "Activity" + "symbol": "Score" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completed_circles" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "defaulted_circles" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "last_activity_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "score" + }, + "val": { + "u32": 650 + } + }, + { + "key": { + "symbol": "streak_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "tier" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "total_circles" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "updated_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 3 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 0 } ] }, @@ -245,103 +378,6 @@ }, "live_until": 4095 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Scores" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "completed_circles" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "defaulted_circles" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "last_activity_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "score" - }, - "val": { - "u32": 650 - } - }, - { - "key": { - "symbol": "streak_count" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "tier" - }, - "val": { - "u32": 3 - } - }, - { - "key": { - "symbol": "total_circles" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "updated_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/reputation-registry/test_snapshots/test/test_pause_blocks_get_score.1.json b/packages/reputation-registry/test_snapshots/test/test_pause_blocks_get_score.1.json index 6228dbb..d373817 100644 --- a/packages/reputation-registry/test_snapshots/test/test_pause_blocks_get_score.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_pause_blocks_get_score.1.json @@ -32,7 +32,7 @@ "function": { "contract_fn": { "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "pause", + "function_name": "pause_registry", "args": [ { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" @@ -52,7 +52,7 @@ "function": { "contract_fn": { "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "unpause", + "function_name": "unpause_registry", "args": [ { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" diff --git a/packages/reputation-registry/test_snapshots/test/test_pause_blocks_record.1.json b/packages/reputation-registry/test_snapshots/test/test_pause_blocks_record.1.json index 342fc71..7968226 100644 --- a/packages/reputation-registry/test_snapshots/test/test_pause_blocks_record.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_pause_blocks_record.1.json @@ -32,7 +32,7 @@ "function": { "contract_fn": { "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "pause", + "function_name": "pause_registry", "args": [ { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" @@ -52,7 +52,7 @@ "function": { "contract_fn": { "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "unpause", + "function_name": "unpause_registry", "args": [ { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" @@ -110,68 +110,10 @@ "key": { "vec": [ { - "symbol": "Activity" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "activity_type" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "score_impact" - }, - "val": { - "u32": 100 - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "symbol": "Score" + }, { - "symbol": "Scores" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } ] }, @@ -258,6 +200,100 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "activity_type" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "score_impact" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "timestamp" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/reputation-registry/test_snapshots/test/test_record_activity_increases_score.1.json b/packages/reputation-registry/test_snapshots/test/test_record_activity_increases_score.1.json index a3cbb18..c6c75e5 100644 --- a/packages/reputation-registry/test_snapshots/test/test_record_activity_increases_score.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_record_activity_increases_score.1.json @@ -72,68 +72,10 @@ "key": { "vec": [ { - "symbol": "Activity" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "activity_type" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "score_impact" - }, - "val": { - "u32": 100 - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "symbol": "Score" + }, { - "symbol": "Scores" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } ] }, @@ -220,6 +162,100 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 1 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "activity_type" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "score_impact" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "timestamp" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/reputation-registry/test_snapshots/test/test_score_caps_at_1000.1.json b/packages/reputation-registry/test_snapshots/test/test_score_caps_at_1000.1.json index ca8ba04..1fbaf45 100644 --- a/packages/reputation-registry/test_snapshots/test/test_score_caps_at_1000.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_score_caps_at_1000.1.json @@ -97,104 +97,10 @@ "key": { "vec": [ { - "symbol": "Activity" - } - ] - }, - "durability": "persistent", - "val": { - "vec": [ - { - "map": [ - { - "key": { - "symbol": "activity_type" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "score_impact" - }, - "val": { - "u32": 600 - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] + "symbol": "Score" }, { - "map": [ - { - "key": { - "symbol": "activity_type" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "score_impact" - }, - "val": { - "u32": 500 - } - }, - { - "key": { - "symbol": "timestamp" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Scores" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" } ] }, @@ -281,6 +187,136 @@ }, "live_until": 4095 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 2 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 0 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "activity_type" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "score_impact" + }, + "val": { + "u32": 600 + } + }, + { + "key": { + "symbol": "timestamp" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + }, + { + "map": [ + { + "key": { + "symbol": "activity_type" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "score_impact" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "timestamp" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/reputation-registry/test_snapshots/test/test_storage_increment_saturating.1.json b/packages/reputation-registry/test_snapshots/test/test_storage_increment_saturating.1.json new file mode 100644 index 0000000..ba1b408 --- /dev/null +++ b/packages/reputation-registry/test_snapshots/test/test_storage_increment_saturating.1.json @@ -0,0 +1,145 @@ +{ + "generators": { + "address": 3, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [] + ], + "ledger": { + "protocol_version": 26, + "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": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Completions" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 4294967295 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Defaults" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 4294967295 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Streak" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 4294967295 + } + } + }, + "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_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/packages/reputation-registry/test_snapshots/test/test_tier_progression.1.json b/packages/reputation-registry/test_snapshots/test/test_tier_progression.1.json index e36a22a..34c52fe 100644 --- a/packages/reputation-registry/test_snapshots/test/test_tier_progression.1.json +++ b/packages/reputation-registry/test_snapshots/test/test_tier_progression.1.json @@ -151,7 +151,140 @@ "key": { "vec": [ { - "symbol": "Activity" + "symbol": "Score" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "completed_circles" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "defaulted_circles" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "last_activity_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "score" + }, + "val": { + "u32": 800 + } + }, + { + "key": { + "symbol": "streak_count" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "tier" + }, + "val": { + "u32": 4 + } + }, + { + "key": { + "symbol": "total_circles" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "updated_at" + }, + "val": { + "u64": "0" + } + }, + { + "key": { + "symbol": "user" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityCount" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "u32": 4 + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserActivityPage" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 0 } ] }, @@ -310,103 +443,6 @@ }, "live_until": 4095 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Scores" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "completed_circles" - }, - "val": { - "u32": 2 - } - }, - { - "key": { - "symbol": "defaulted_circles" - }, - "val": { - "u32": 0 - } - }, - { - "key": { - "symbol": "last_activity_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "score" - }, - "val": { - "u32": 800 - } - }, - { - "key": { - "symbol": "streak_count" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "tier" - }, - "val": { - "u32": 4 - } - }, - { - "key": { - "symbol": "total_circles" - }, - "val": { - "u32": 1 - } - }, - { - "key": { - "symbol": "updated_at" - }, - "val": { - "u64": "0" - } - }, - { - "key": { - "symbol": "user" - }, - "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" - } - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/src/contract.rs b/packages/staking/src/contract.rs index 4296a75..b6b405b 100644 --- a/packages/staking/src/contract.rs +++ b/packages/staking/src/contract.rs @@ -365,3 +365,8 @@ pub fn update_admin(env: &Env, current_admin: &Address, new_admin: &Address) -> env.storage().instance().set(&DataKey::Admin, new_admin); Ok(()) } + +/// Returns the unbonding period duration in seconds (14 days). +pub fn get_unbonding_period_seconds(_env: &Env) -> u64 { + UNBONDING_PERIOD_SECONDS +} diff --git a/packages/staking/src/lib.rs b/packages/staking/src/lib.rs index 7bcd6af..a82b5ce 100644 --- a/packages/staking/src/lib.rs +++ b/packages/staking/src/lib.rs @@ -74,6 +74,11 @@ impl Staking { pub fn update_admin(env: Env, current_admin: Address, new_admin: Address) -> Result<(), types::StakingError> { contract::update_admin(&env, ¤t_admin, &new_admin) } + + /// Returns the unbonding period duration in seconds (14 days). + pub fn get_unbonding_period_seconds(env: Env) -> u64 { + contract::get_unbonding_period_seconds(&env) + } } #[cfg(test)] diff --git a/packages/staking/src/test.rs b/packages/staking/src/test.rs index 8ab98b9..838abe4 100644 --- a/packages/staking/src/test.rs +++ b/packages/staking/src/test.rs @@ -459,3 +459,10 @@ fn test_staking_period_from_u32() { assert_eq!(StakingPeriod::from_u32(2), None); assert_eq!(StakingPeriod::from_u32(24), None); } + +#[test] +fn test_get_unbonding_period_seconds() { + let (env, admin, _, token) = setup_test_env(); + let staking_client = deploy_staking_contract(&env, &admin, &token); + assert_eq!(staking_client.get_unbonding_period_seconds(), UNBONDING_PERIOD_SECONDS); +} diff --git a/packages/staking/test_snapshots/test/test_claim_happy_path.1.json b/packages/staking/test_snapshots/test/test_claim_happy_path.1.json index f7832b2..b0ddfda 100644 --- a/packages/staking/test_snapshots/test/test_claim_happy_path.1.json +++ b/packages/staking/test_snapshots/test/test_claim_happy_path.1.json @@ -308,6 +308,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_claim_no_unbonding_position.1.json b/packages/staking/test_snapshots/test/test_claim_no_unbonding_position.1.json index d75fa28..a8f18ac 100644 --- a/packages/staking/test_snapshots/test/test_claim_no_unbonding_position.1.json +++ b/packages/staking/test_snapshots/test/test_claim_no_unbonding_position.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_claim_unbonding_not_complete.1.json b/packages/staking/test_snapshots/test/test_claim_unbonding_not_complete.1.json index 5ff40ef..b6099a5 100644 --- a/packages/staking/test_snapshots/test/test_claim_unbonding_not_complete.1.json +++ b/packages/staking/test_snapshots/test/test_claim_unbonding_not_complete.1.json @@ -268,6 +268,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_full_staking_lifecycle.1.json b/packages/staking/test_snapshots/test/test_full_staking_lifecycle.1.json index ddb9012..7cb59a5 100644 --- a/packages/staking/test_snapshots/test/test_full_staking_lifecycle.1.json +++ b/packages/staking/test_snapshots/test/test_full_staking_lifecycle.1.json @@ -310,6 +310,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_get_unbonding_period_seconds.1.json b/packages/staking/test_snapshots/test/test_get_unbonding_period_seconds.1.json new file mode 100644 index 0000000..a8f18ac --- /dev/null +++ b/packages/staking/test_snapshots/test/test_get_unbonding_period_seconds.1.json @@ -0,0 +1,430 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "function_name": "mint", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "i128": "10000000000" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "function_name": "init", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 26, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF", + "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": { + "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": "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "symbol": "paused" + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "Token" + } + ] + }, + "val": { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalStaked" + } + ] + }, + "val": { + "i128": "0" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "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": "10000000000" + } + }, + { + "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": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000004" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "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/packages/staking/test_snapshots/test/test_get_voting_power_during_unbonding.1.json b/packages/staking/test_snapshots/test/test_get_voting_power_during_unbonding.1.json index 3c4bb19..512195a 100644 --- a/packages/staking/test_snapshots/test/test_get_voting_power_during_unbonding.1.json +++ b/packages/staking/test_snapshots/test/test_get_voting_power_during_unbonding.1.json @@ -268,6 +268,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_get_voting_power_no_stake.1.json b/packages/staking/test_snapshots/test/test_get_voting_power_no_stake.1.json index 6052a89..c032ac8 100644 --- a/packages/staking/test_snapshots/test/test_get_voting_power_no_stake.1.json +++ b/packages/staking/test_snapshots/test/test_get_voting_power_no_stake.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_init.1.json b/packages/staking/test_snapshots/test/test_init.1.json index d51a8c2..c7d8380 100644 --- a/packages/staking/test_snapshots/test/test_init.1.json +++ b/packages/staking/test_snapshots/test/test_init.1.json @@ -166,6 +166,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_multiple_users_staking.1.json b/packages/staking/test_snapshots/test/test_multiple_users_staking.1.json index 01d6959..6510ccf 100644 --- a/packages/staking/test_snapshots/test/test_multiple_users_staking.1.json +++ b/packages/staking/test_snapshots/test/test_multiple_users_staking.1.json @@ -430,6 +430,40 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_pause_contract.1.json b/packages/staking/test_snapshots/test/test_pause_contract.1.json index 6cf3bd4..5935f3a 100644 --- a/packages/staking/test_snapshots/test/test_pause_contract.1.json +++ b/packages/staking/test_snapshots/test/test_pause_contract.1.json @@ -203,6 +203,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_pause_unauthorized.1.json b/packages/staking/test_snapshots/test/test_pause_unauthorized.1.json index d75fa28..a8f18ac 100644 --- a/packages/staking/test_snapshots/test/test_pause_unauthorized.1.json +++ b/packages/staking/test_snapshots/test/test_pause_unauthorized.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_already_staked.1.json b/packages/staking/test_snapshots/test/test_stake_already_staked.1.json index cdfcbf9..2a86b41 100644 --- a/packages/staking/test_snapshots/test/test_stake_already_staked.1.json +++ b/packages/staking/test_snapshots/test/test_stake_already_staked.1.json @@ -229,6 +229,34 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_insufficient_token_balance.1.json b/packages/staking/test_snapshots/test/test_stake_insufficient_token_balance.1.json index d75fa28..a8f18ac 100644 --- a/packages/staking/test_snapshots/test/test_stake_insufficient_token_balance.1.json +++ b/packages/staking/test_snapshots/test/test_stake_insufficient_token_balance.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_invalid_amount_negative.1.json b/packages/staking/test_snapshots/test/test_stake_invalid_amount_negative.1.json index d75fa28..a8f18ac 100644 --- a/packages/staking/test_snapshots/test/test_stake_invalid_amount_negative.1.json +++ b/packages/staking/test_snapshots/test/test_stake_invalid_amount_negative.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_invalid_amount_zero.1.json b/packages/staking/test_snapshots/test/test_stake_invalid_amount_zero.1.json index d75fa28..a8f18ac 100644 --- a/packages/staking/test_snapshots/test/test_stake_invalid_amount_zero.1.json +++ b/packages/staking/test_snapshots/test/test_stake_invalid_amount_zero.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_invalid_period.1.json b/packages/staking/test_snapshots/test/test_stake_invalid_period.1.json index d75fa28..a8f18ac 100644 --- a/packages/staking/test_snapshots/test/test_stake_invalid_period.1.json +++ b/packages/staking/test_snapshots/test/test_stake_invalid_period.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_one_month_happy_path.1.json b/packages/staking/test_snapshots/test/test_stake_one_month_happy_path.1.json index eeeab1f..0eaa9e9 100644 --- a/packages/staking/test_snapshots/test/test_stake_one_month_happy_path.1.json +++ b/packages/staking/test_snapshots/test/test_stake_one_month_happy_path.1.json @@ -231,6 +231,34 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_six_months_multiplier.1.json b/packages/staking/test_snapshots/test/test_stake_six_months_multiplier.1.json index abc751c..0531ad5 100644 --- a/packages/staking/test_snapshots/test/test_stake_six_months_multiplier.1.json +++ b/packages/staking/test_snapshots/test/test_stake_six_months_multiplier.1.json @@ -229,6 +229,34 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_three_months_multiplier.1.json b/packages/staking/test_snapshots/test/test_stake_three_months_multiplier.1.json index 5651e05..2021774 100644 --- a/packages/staking/test_snapshots/test/test_stake_three_months_multiplier.1.json +++ b/packages/staking/test_snapshots/test/test_stake_three_months_multiplier.1.json @@ -229,6 +229,34 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_stake_twelve_months_multiplier.1.json b/packages/staking/test_snapshots/test/test_stake_twelve_months_multiplier.1.json index 01fa3ff..de04b37 100644 --- a/packages/staking/test_snapshots/test/test_stake_twelve_months_multiplier.1.json +++ b/packages/staking/test_snapshots/test/test_stake_twelve_months_multiplier.1.json @@ -229,6 +229,34 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_unpause_contract.1.json b/packages/staking/test_snapshots/test/test_unpause_contract.1.json index 360b956..464e3cf 100644 --- a/packages/staking/test_snapshots/test/test_unpause_contract.1.json +++ b/packages/staking/test_snapshots/test/test_unpause_contract.1.json @@ -307,6 +307,34 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_unstake_happy_path.1.json b/packages/staking/test_snapshots/test/test_unstake_happy_path.1.json index f1b9dc4..e2b6ac4 100644 --- a/packages/staking/test_snapshots/test/test_unstake_happy_path.1.json +++ b/packages/staking/test_snapshots/test/test_unstake_happy_path.1.json @@ -271,6 +271,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_unstake_no_active_stake.1.json b/packages/staking/test_snapshots/test/test_unstake_no_active_stake.1.json index d75fa28..a8f18ac 100644 --- a/packages/staking/test_snapshots/test/test_unstake_no_active_stake.1.json +++ b/packages/staking/test_snapshots/test/test_unstake_no_active_stake.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_update_admin.1.json b/packages/staking/test_snapshots/test/test_update_admin.1.json index 93d1077..88f64de 100644 --- a/packages/staking/test_snapshots/test/test_update_admin.1.json +++ b/packages/staking/test_snapshots/test/test_update_admin.1.json @@ -225,6 +225,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0, diff --git a/packages/staking/test_snapshots/test/test_update_admin_unauthorized.1.json b/packages/staking/test_snapshots/test/test_update_admin_unauthorized.1.json index 16160d9..9bec44f 100644 --- a/packages/staking/test_snapshots/test/test_update_admin_unauthorized.1.json +++ b/packages/staking/test_snapshots/test/test_update_admin_unauthorized.1.json @@ -163,6 +163,30 @@ }, "live_until": 6311999 }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "vec": [ + { + "symbol": "StakerList" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, { "entry": { "last_modified_ledger_seq": 0,