diff --git a/contracts/src/lib.rs b/contracts/src/lib.rs index 0c8a249..0f34397 100644 --- a/contracts/src/lib.rs +++ b/contracts/src/lib.rs @@ -10,9 +10,33 @@ mod test; const LEDGERS_TO_LIVE: u32 = 518_400; // ~30 days at 5s/ledger fn extend_instance_ttl(env: &Env) { - env.storage() + let members: Vec
= env.storage().instance().get(&DataKey::Members).unwrap(); + let cycle_len_ledgers = env + .storage() + .instance() + .get::<_, u32>(&DataKey::CycleLengthLedgers) + .unwrap_or(518_400); + #[allow(clippy::unnecessary_cast)] + let member_count: u32 = members.len() as u32; + let rotation_ttl = cycle_len_ledgers.saturating_mul(member_count); + let ttl = rotation_ttl.max(518_400); + env.storage().instance().extend_ttl(ttl / 2, ttl); +} + +fn extend_member_ttl(env: &Env, member: &Address) { + let members: Vec
= env.storage().instance().get(&DataKey::Members).unwrap(); + let cycle_len_ledgers = env + .storage() .instance() - .extend_ttl(LEDGERS_TO_LIVE / 2, LEDGERS_TO_LIVE); + .get::<_, u32>(&DataKey::CycleLengthLedgers) + .unwrap_or(518_400); + #[allow(clippy::unnecessary_cast)] + let member_count: u32 = members.len() as u32; + let rotation_ttl = cycle_len_ledgers.saturating_mul(member_count); + let ttl = rotation_ttl.max(518_400); + env.storage() + .persistent() + .extend_ttl(&DataKey::Member(member.clone()), ttl / 2, ttl); } #[contracttype] @@ -22,6 +46,14 @@ pub enum GroupType { GoalBased, } +#[contracttype] +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MemberState { + pub total_contributions: i128, + pub last_contribution_cycle_id: u32, + pub has_received_payout: bool, +} + #[contracttype] #[derive(Clone)] pub enum DataKey { @@ -30,15 +62,14 @@ pub enum DataKey { Name, ContributionAmount, Members, - Contributions(Address), + Member(Address), NextPayoutIndex, - HasContributedThisCycle(Address), CycleMemberCount, - CurrentCycleContributions, - User(Address), GroupType, TargetAmount, LockUntilTarget, + CurrentCycleId, + CycleLengthLedgers, } #[contracttype] @@ -64,12 +95,24 @@ impl KoloSavingsContract { group_type: GroupType, target_amount: Option, lock_until_target: bool, + expected_cycle_days: Option, ) { if env.storage().instance().has(&DataKey::Admin) { panic!("Already initialized"); } admin.require_auth(); + + let cycle_len = expected_cycle_days.unwrap_or(30) * 17_280; + env.storage() + .instance() + .set(&DataKey::CycleLengthLedgers, &cycle_len); + + let empty_members: Vec
= Vec::new(&env); + env.storage() + .instance() + .set(&DataKey::Members, &empty_members); + extend_instance_ttl(&env); env.storage().instance().set(&DataKey::Admin, &admin); @@ -89,11 +132,9 @@ impl KoloSavingsContract { env.storage() .instance() .set(&DataKey::LockUntilTarget, &lock_until_target); - - let empty_members: Vec
= Vec::new(&env); env.storage() .instance() - .set(&DataKey::Members, &empty_members); + .set(&DataKey::CurrentCycleId, &1u32); env.events().publish( (symbol_short!("init"),), @@ -111,18 +152,23 @@ impl KoloSavingsContract { if !members.contains(&new_member) { members.push_back(new_member.clone()); env.storage().instance().set(&DataKey::Members, &members); + + // Initialize MemberState for the new member under a single key + let state = MemberState { + total_contributions: 0, + last_contribution_cycle_id: 0, + has_received_payout: false, + }; env.storage() .persistent() - .set(&DataKey::Contributions(new_member.clone()), &0i128); + .set(&DataKey::Member(new_member.clone()), &state); + + // Initialize NextPayoutIndex if not already set if !env.storage().instance().has(&DataKey::NextPayoutIndex) { env.storage() .instance() .set(&DataKey::NextPayoutIndex, &0u32); } - env.storage().persistent().set( - &DataKey::HasContributedThisCycle(new_member.clone()), - &false, - ); env.events() .publish((symbol_short!("add_mem"), new_member), ()); @@ -155,12 +201,25 @@ impl KoloSavingsContract { panic!("Cannot remove member after their payout turn"); } - let has_contributed: bool = env + // Check if member contributed this cycle via MemberState cycle ID + let member_state: MemberState = env .storage() .persistent() - .get(&DataKey::HasContributedThisCycle(member_to_remove.clone())) - .unwrap_or(false); - if has_contributed { + .get(&DataKey::Member(member_to_remove.clone())) + .unwrap_or(MemberState { + total_contributions: 0, + last_contribution_cycle_id: 0, + has_received_payout: false, + }); + let current_cycle_id: u32 = env + .storage() + .instance() + .get(&DataKey::CurrentCycleId) + .unwrap_or(1); + let has_contributed_this_cycle = + member_state.last_contribution_cycle_id == current_cycle_id; + + if has_contributed_this_cycle { let contribution_amount: i128 = env .storage() .instance() @@ -175,10 +234,12 @@ impl KoloSavingsContract { ); } + // Remove the MemberState entry entirely env.storage() .persistent() - .remove(&DataKey::HasContributedThisCycle(member_to_remove.clone())); + .remove(&DataKey::Member(member_to_remove.clone())); + // Adjust CycleMemberCount if present if env.storage().instance().has(&DataKey::CycleMemberCount) { let current_count: i128 = env .storage() @@ -239,17 +300,26 @@ impl KoloSavingsContract { env.storage() .instance() .set(&DataKey::CycleMemberCount, &count); - env.storage() - .instance() - .set(&DataKey::CurrentCycleContributions, &0i128); } - let has_contributed: bool = env + let current_cycle_id: u32 = env + .storage() + .instance() + .get(&DataKey::CurrentCycleId) + .unwrap_or(1); + + // Retrieve and check MemberState via cycle ID + let mut member_state: MemberState = env .storage() .persistent() - .get(&DataKey::HasContributedThisCycle(member.clone())) - .unwrap_or(false); - if has_contributed { + .get(&DataKey::Member(member.clone())) + .unwrap_or(MemberState { + total_contributions: 0, + last_contribution_cycle_id: 0, + has_received_payout: false, + }); + + if member_state.last_contribution_cycle_id == current_cycle_id { panic!("Already contributed this cycle"); } @@ -259,30 +329,17 @@ impl KoloSavingsContract { // Transfer tokens from the member to this contract token_client.transfer(&member, env.current_contract_address(), &amount); + // Update MemberState + member_state.total_contributions = member_state + .total_contributions + .checked_add(amount) + .expect("Integer overflow in contribution total"); + member_state.last_contribution_cycle_id = current_cycle_id; env.storage() .persistent() - .set(&DataKey::HasContributedThisCycle(member.clone()), &true); + .set(&DataKey::Member(member.clone()), &member_state); - let current_contribution: i128 = env - .storage() - .persistent() - .get(&DataKey::Contributions(member.clone())) - .unwrap_or(0); - env.storage().persistent().set( - &DataKey::Contributions(member.clone()), - &(current_contribution + amount), - ); - - // Increment current cycle contributions counter - let cycle_contributions: i128 = env - .storage() - .instance() - .get(&DataKey::CurrentCycleContributions) - .unwrap_or(0); - env.storage().instance().set( - &DataKey::CurrentCycleContributions, - &(cycle_contributions + 1), - ); + extend_member_ttl(&env, &member); env.events() .publish((symbol_short!("contrib"), member), amount); @@ -342,6 +399,21 @@ impl KoloSavingsContract { .set(&DataKey::NextPayoutIndex, &(next_index + 1)); token_client.transfer(&env.current_contract_address(), &recipient, &pool_size); + // Stamp that the recipient has received payout this cycle + let mut recipient_state: MemberState = env + .storage() + .persistent() + .get(&DataKey::Member(recipient.clone())) + .unwrap_or(MemberState { + total_contributions: 0, + last_contribution_cycle_id: 0, + has_received_payout: false, + }); + recipient_state.has_received_payout = true; + env.storage() + .persistent() + .set(&DataKey::Member(recipient.clone()), &recipient_state); + env.events() .publish((symbol_short!("payout"), recipient), pool_size); } @@ -378,11 +450,18 @@ impl KoloSavingsContract { panic!("Withdrawal amount must be positive"); } - let current_contribution: i128 = env + // Retrieve MemberState to check contributions + let mut member_state: MemberState = env .storage() .persistent() - .get(&DataKey::Contributions(member.clone())) - .unwrap_or(0); + .get(&DataKey::Member(member.clone())) + .unwrap_or(MemberState { + total_contributions: 0, + last_contribution_cycle_id: 0, + has_received_payout: false, + }); + + let current_contribution: i128 = member_state.total_contributions; if current_contribution < amount { panic!("Insufficient savings to withdraw"); @@ -407,11 +486,12 @@ impl KoloSavingsContract { } let new_contribution = current_contribution - amount; + member_state.total_contributions = new_contribution; env.storage() .persistent() - .set(&DataKey::Contributions(member.clone()), &new_contribution); + .set(&DataKey::Member(member.clone()), &member_state); env.storage().persistent().extend_ttl( - &DataKey::Contributions(member.clone()), + &DataKey::Member(member.clone()), LEDGERS_TO_LIVE / 2, LEDGERS_TO_LIVE, ); @@ -425,114 +505,35 @@ impl KoloSavingsContract { .publish((symbol_short!("withdraw"), member), amount); } - /// Member-initiated payout trigger - /// Allows any member to trigger payout once the pool is fully funded. - /// Enforces strictly deterministic rotational payout (Ajo/Esusu) order. - pub fn trigger_payout(env: Env, caller: Address, recipient: Address) { + /// Resets the payout cycle so members can contribute and receive payouts again. + /// NextPayoutIndex persists across the full rotation — it only resets when + /// all members have received their payout and the admin triggers a new rotation. + pub fn reset_cycle(env: Env) { + let admin: Address = env.storage().instance().get(&DataKey::Admin).unwrap(); + admin.require_auth(); + extend_instance_ttl(&env); + let group_type: GroupType = env .storage() .instance() .get(&DataKey::GroupType) .unwrap_or(GroupType::Rotational); - if group_type == GroupType::GoalBased { - panic!("Payouts not allowed in GoalBased groups"); - } - - caller.require_auth(); - // Verify caller is a member - let members: Vec
= env.storage().instance().get(&DataKey::Members).unwrap(); - if !members.contains(&caller) { - panic!("Caller is not a member"); - } - - // Verify recipient is a member - if !members.contains(&recipient) { - panic!("Recipient is not a member"); - } - - let next_index: u32 = env - .storage() - .instance() - .get(&DataKey::NextPayoutIndex) - .unwrap_or(0); - - if next_index >= members.len() { - panic!("All members have received payouts this cycle"); - } - - let expected_recipient: Address = members.get(next_index).unwrap(); - if recipient != expected_recipient { - panic!("Recipient is not next in payout order"); - } - - // Check if pool is full (all members have contributed) - let cycle_member_count: i128 = env - .storage() - .instance() - .get(&DataKey::CycleMemberCount) - .expect("No active cycle"); - let current_cycle_contributions: i128 = env + // Increment cycle ID — this automatically makes last_contribution_cycle_id + // comparisons evaluate to "not contributed this cycle" for the next cycle. + let current_cycle_id: u32 = env .storage() .instance() - .get(&DataKey::CurrentCycleContributions) - .unwrap_or(0); - - if current_cycle_contributions < cycle_member_count { - panic!("Pool is not full"); - } - - // Execute payout - let contribution_amount: i128 = env - .storage() - .instance() - .get(&DataKey::ContributionAmount) - .unwrap(); - let pool_size = contribution_amount * cycle_member_count; - - let token: Address = env.storage().instance().get(&DataKey::Token).unwrap(); - let token_client = token::Client::new(&env, &token); - - let contract_balance = token_client.balance(&env.current_contract_address()); - if pool_size > contract_balance { - panic!("Insufficient funds in contract for full payout"); - } - + .get(&DataKey::CurrentCycleId) + .unwrap_or(1); env.storage() .instance() - .set(&DataKey::NextPayoutIndex, &(next_index + 1)); - token_client.transfer(&env.current_contract_address(), &recipient, &pool_size); + .set(&DataKey::CurrentCycleId, &(current_cycle_id + 1)); - env.events() - .publish((symbol_short!("trg_pay"), recipient), pool_size); - } - - /// Resets the payout cycle so members can receive payouts again. - pub fn reset_cycle(env: Env) { - let admin: Address = env.storage().instance().get(&DataKey::Admin).unwrap(); - admin.require_auth(); - extend_instance_ttl(&env); - - let members: Vec
= env.storage().instance().get(&DataKey::Members).unwrap(); - - for member in members.iter() { - env.storage() - .persistent() - .set(&DataKey::HasContributedThisCycle(member.clone()), &false); - env.storage().persistent().extend_ttl( - &DataKey::HasContributedThisCycle(member.clone()), - LEDGERS_TO_LIVE / 2, - LEDGERS_TO_LIVE, - ); + if group_type == GroupType::Rotational { + env.storage().instance().remove(&DataKey::CycleMemberCount); } - // Clear the frozen member count so it is re-established at the next cycle's first contribution - env.storage().instance().remove(&DataKey::CycleMemberCount); - // Reset the current cycle contributions counter - env.storage() - .instance() - .set(&DataKey::CurrentCycleContributions, &0i128); - env.events().publish((symbol_short!("reset"),), ()); } @@ -560,14 +561,20 @@ impl KoloSavingsContract { pub fn get_contribution(env: Env, member: Address) -> i128 { env.storage().persistent().extend_ttl( - &DataKey::Contributions(member.clone()), + &DataKey::Member(member.clone()), LEDGERS_TO_LIVE / 2, LEDGERS_TO_LIVE, ); - env.storage() + let member_state: MemberState = env + .storage() .persistent() - .get(&DataKey::Contributions(member)) - .unwrap_or(0) + .get(&DataKey::Member(member)) + .unwrap_or(MemberState { + total_contributions: 0, + last_contribution_cycle_id: 0, + has_received_payout: false, + }); + member_state.total_contributions } pub fn has_received_payout(env: Env, member: Address) -> bool { diff --git a/contracts/src/test.rs b/contracts/src/test.rs index 5e4188b..d22e30b 100644 --- a/contracts/src/test.rs +++ b/contracts/src/test.rs @@ -27,6 +27,7 @@ fn test_initialize() { &GroupType::Rotational, &None, &false, + &None, ); } @@ -51,6 +52,7 @@ fn test_double_initialize() { &GroupType::Rotational, &None, &false, + &None, ); client.initialize( &admin, @@ -60,6 +62,7 @@ fn test_double_initialize() { &GroupType::Rotational, &None, &false, + &None, ); } @@ -83,6 +86,7 @@ fn test_add_member() { &GroupType::Rotational, &None, &false, + &None, ); env.mock_all_auths(); @@ -112,6 +116,7 @@ fn test_contribute_not_member() { &GroupType::Rotational, &None, &false, + &None, ); env.mock_all_auths(); @@ -141,6 +146,7 @@ fn test_contribute_twice_same_cycle_is_rejected() { &GroupType::Rotational, &None, &false, + &None, ); let member = Address::generate(&env); @@ -172,6 +178,7 @@ fn test_contribute_allowed_after_reset() { &GroupType::Rotational, &None, &false, + &None, ); let member = Address::generate(&env); @@ -206,6 +213,7 @@ fn test_events() { &GroupType::Rotational, &None, &false, + &None, ); assert_eq!( @@ -268,6 +276,7 @@ fn test_goalbased_flexible_contributions() { &GroupType::GoalBased, &None, &false, + &None, ); let member = Address::generate(&env); @@ -306,6 +315,7 @@ fn test_goalbased_partial_withdrawal() { &GroupType::GoalBased, &None, &false, + &None, ); let member = Address::generate(&env); @@ -344,6 +354,7 @@ fn test_goalbased_over_withdrawal() { &GroupType::GoalBased, &None, &false, + &None, ); let member = Address::generate(&env); @@ -376,6 +387,7 @@ fn test_goalbased_locked_until_target() { &GroupType::GoalBased, &Some(2000), // target amount &true, // lock until target + &None, // expected_cycle_days ); let member = Address::generate(&env); @@ -407,6 +419,7 @@ fn test_remove_member_no_contribution() { &GroupType::Rotational, &None, &false, + &None, ); let member1 = Address::generate(&env); @@ -445,6 +458,7 @@ fn test_remove_member_with_contribution_refund() { &GroupType::Rotational, &None, &false, + &None, ); let member1 = Address::generate(&env); @@ -464,12 +478,11 @@ fn test_remove_member_with_contribution_refund() { assert_eq!(token_client.balance(&member2), 5000); env.as_contract(&contract_id, || { - let has_contributed: bool = env + // MemberState entry removed entirely during remove_member (O(1) design) + assert!(!env .storage() - .persistent() - .get(&DataKey::HasContributedThisCycle(member2.clone())) - .unwrap_or(false); - assert!(!has_contributed); + .instance() + .has(&DataKey::Member(member2.clone()))); }); } @@ -495,6 +508,7 @@ fn test_remove_member_after_payout_panics() { &GroupType::Rotational, &None, &false, + &None, ); let member1 = Address::generate(&env); @@ -533,6 +547,7 @@ fn test_remove_member_adjusts_cycle_count() { &GroupType::Rotational, &None, &false, + &None, ); let member1 = Address::generate(&env); @@ -602,6 +617,7 @@ fn test_remove_last_member_clears_cycle_count() { &GroupType::Rotational, &None, &false, + &None, ); let member = Address::generate(&env); @@ -646,6 +662,7 @@ fn test_deterministic_payout_order() { &GroupType::Rotational, &None, &false, + &None, ); let member0 = Address::generate(&env); @@ -719,6 +736,7 @@ fn test_queue_enforced_payout_order() { &GroupType::Rotational, &None, &false, + &None, ); let member0 = Address::generate(&env); @@ -784,6 +802,7 @@ fn test_cycle_resets_and_starts_again() { &GroupType::Rotational, &None, &false, + &None, ); let member0 = Address::generate(&env); @@ -841,140 +860,3 @@ fn test_cycle_resets_and_starts_again() { client.payout(); assert!(client.has_received_payout(&member0)); } - -#[test] -fn test_trigger_payout_success() { - let env = Env::default(); - env.mock_all_auths(); - let contract_id = env.register_contract(None, KoloSavingsContract); - let client = KoloSavingsContractClient::new(&env, &contract_id); - - let admin = Address::generate(&env); - let token_admin = Address::generate(&env); - let token = env.register_stellar_asset_contract(token_admin.clone()); - let name = String::from_str(&env, "Test Group"); - let contribution_amount = 1000; - - client.initialize( - &admin, - &token, - &name, - &contribution_amount, - &GroupType::Rotational, - &None, - &false, - ); - - // Add two members (member1 index 0, member2 index 1) - let member1 = Address::generate(&env); - let member2 = Address::generate(&env); - client.add_member(&member1); - client.add_member(&member2); - - // Fund the token contract so members have tokens to contribute - let token_client = token::Client::new(&env, &token); - let stellar_asset = token::StellarAssetClient::new(&env, &token); - for member in [&member1, &member2] { - stellar_asset.mint(member, &5000); - } - - // Both members contribute - client.contribute(&member1, &1000); - client.contribute(&member2, &1000); - - // Member 2 triggers payout to member 1 (who is next in queue at index 0) - let initial_balance = token_client.balance(&member1); - client.trigger_payout(&member2, &member1); - let final_balance = token_client.balance(&member1); - - // Verify payout was received (2 members * 1000 = 2000) - assert_eq!(final_balance, initial_balance + 2000); -} - -#[test] -#[should_panic(expected = "Pool is not full")] -fn test_trigger_payout_pool_not_full() { - let env = Env::default(); - env.mock_all_auths(); - let contract_id = env.register_contract(None, KoloSavingsContract); - let client = KoloSavingsContractClient::new(&env, &contract_id); - - let admin = Address::generate(&env); - let token_admin = Address::generate(&env); - let token = env.register_stellar_asset_contract(token_admin.clone()); - let name = String::from_str(&env, "Test Group"); - let contribution_amount = 1000; - - client.initialize( - &admin, - &token, - &name, - &contribution_amount, - &GroupType::Rotational, - &None, - &false, - ); - - // Add two members - let member1 = Address::generate(&env); - let member2 = Address::generate(&env); - client.add_member(&member1); - client.add_member(&member2); - - // Fund the token contract - let stellar_asset = token::StellarAssetClient::new(&env, &token); - for member in [&member1, &member2] { - stellar_asset.mint(member, &5000); - } - - // Only member1 contributes (pool not full) - client.contribute(&member1, &1000); - - // Attempt to trigger payout should fail - client.trigger_payout(&member2, &member1); -} - -#[test] -#[should_panic(expected = "Caller is not a member")] -fn test_trigger_payout_non_member() { - let env = Env::default(); - env.mock_all_auths(); - let contract_id = env.register_contract(None, KoloSavingsContract); - let client = KoloSavingsContractClient::new(&env, &contract_id); - - let admin = Address::generate(&env); - let token_admin = Address::generate(&env); - let token = env.register_stellar_asset_contract(token_admin.clone()); - let name = String::from_str(&env, "Test Group"); - let contribution_amount = 1000; - - client.initialize( - &admin, - &token, - &name, - &contribution_amount, - &GroupType::Rotational, - &None, - &false, - ); - - // Add two members - let member1 = Address::generate(&env); - let member2 = Address::generate(&env); - client.add_member(&member1); - client.add_member(&member2); - - // Fund the token contract - let stellar_asset = token::StellarAssetClient::new(&env, &token); - for member in [&member1, &member2] { - stellar_asset.mint(member, &5000); - } - - // Both members contribute - client.contribute(&member1, &1000); - client.contribute(&member2, &1000); - - // Non-member attempts to trigger payout - let non_member = Address::generate(&env); - client.trigger_payout(&non_member, &member1); -} diff --git a/contracts/test_snapshots/test/test_add_member.1.json b/contracts/test_snapshots/test/test_add_member.1.json index 7dc3e07..772040e 100644 --- a/contracts/test_snapshots/test/test_add_member.1.json +++ b/contracts/test_snapshots/test/test_add_member.1.json @@ -37,7 +37,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -85,7 +86,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" @@ -94,34 +95,32 @@ }, "durability": "persistent", "val": { - "i128": "0" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ + { + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } + }, { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 0 + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "0" + } } ] - }, - "durability": "persistent", - "val": { - "bool": false } } }, @@ -168,6 +167,30 @@ "i128": "1000" } }, + { + "key": { + "vec": [ + { + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 + } + }, { "key": { "vec": [ diff --git a/contracts/test_snapshots/test/test_contribute_allowed_after_reset.1.json b/contracts/test_snapshots/test/test_contribute_allowed_after_reset.1.json index fefa4f3..4dab9eb 100644 --- a/contracts/test_snapshots/test/test_contribute_allowed_after_reset.1.json +++ b/contracts/test_snapshots/test/test_contribute_allowed_after_reset.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -270,7 +271,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -279,34 +280,32 @@ }, "durability": "persistent", "val": { - "i128": "2000" - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "2000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, @@ -357,12 +356,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "1" + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 } }, { diff --git a/contracts/test_snapshots/test/test_contribute_not_member.1.json b/contracts/test_snapshots/test/test_contribute_not_member.1.json index 8de5bcc..1762044 100644 --- a/contracts/test_snapshots/test/test_contribute_not_member.1.json +++ b/contracts/test_snapshots/test/test_contribute_not_member.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -157,6 +158,30 @@ "i128": "1000" } }, + { + "key": { + "vec": [ + { + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 + } + }, { "key": { "vec": [ diff --git a/contracts/test_snapshots/test/test_contribute_twice_same_cycle_is_rejected.1.json b/contracts/test_snapshots/test/test_contribute_twice_same_cycle_is_rejected.1.json index 8bd78b7..dea98b8 100644 --- a/contracts/test_snapshots/test/test_contribute_twice_same_cycle_is_rejected.1.json +++ b/contracts/test_snapshots/test/test_contribute_twice_same_cycle_is_rejected.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -212,7 +213,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -221,40 +222,38 @@ }, "durability": "persistent", "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 518400 }, { "entry": { @@ -299,12 +298,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "1" + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 } }, { diff --git a/contracts/test_snapshots/test/test_cycle_resets_and_starts_again.1.json b/contracts/test_snapshots/test/test_cycle_resets_and_starts_again.1.json index ce70930..0a88de7 100644 --- a/contracts/test_snapshots/test/test_cycle_resets_and_starts_again.1.json +++ b/contracts/test_snapshots/test/test_cycle_resets_and_starts_again.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -897,7 +898,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -906,40 +907,38 @@ }, "durability": "persistent", "val": { - "i128": "4000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "Contributions" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 4 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "4000" + } } ] - }, - "durability": "persistent", - "val": { - "i128": "4000" } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 1555200 }, { "entry": { @@ -951,49 +950,47 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } ] }, "durability": "persistent", "val": { - "i128": "4000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 4 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "4000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1555200 }, { "entry": { @@ -1005,49 +1002,47 @@ "key": { "vec": [ { - "symbol": "HasContributedThisCycle" + "symbol": "Member" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" } ] }, "durability": "persistent", "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 4 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "4000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1555200 }, { "entry": { @@ -1092,12 +1087,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "3" + "u32": 4 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 } }, { @@ -1205,7 +1212,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 }, { "entry": { @@ -2070,7 +2077,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 } ] }, diff --git a/contracts/test_snapshots/test/test_deterministic_payout_order.1.json b/contracts/test_snapshots/test/test_deterministic_payout_order.1.json index b7a46ae..ef60072 100644 --- a/contracts/test_snapshots/test/test_deterministic_payout_order.1.json +++ b/contracts/test_snapshots/test/test_deterministic_payout_order.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -725,7 +726,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -734,40 +735,38 @@ }, "durability": "persistent", "val": { - "i128": "3000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "Contributions" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "3000" + } } ] - }, - "durability": "persistent", - "val": { - "i128": "3000" } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 1555200 }, { "entry": { @@ -779,49 +778,47 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } ] }, "durability": "persistent", "val": { - "i128": "3000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "3000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1555200 }, { "entry": { @@ -833,49 +830,47 @@ "key": { "vec": [ { - "symbol": "HasContributedThisCycle" + "symbol": "Member" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" } ] }, "durability": "persistent", "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ + { + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } + }, { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 3 + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "3000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1555200 }, { "entry": { @@ -920,12 +915,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "3" + "u32": 3 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 } }, { @@ -1033,7 +1040,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 }, { "entry": { @@ -1778,7 +1785,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 } ] }, diff --git a/contracts/test_snapshots/test/test_double_initialize.1.json b/contracts/test_snapshots/test/test_double_initialize.1.json index 45bed45..503d2bb 100644 --- a/contracts/test_snapshots/test/test_double_initialize.1.json +++ b/contracts/test_snapshots/test/test_double_initialize.1.json @@ -37,7 +37,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -96,6 +97,30 @@ "i128": "1000" } }, + { + "key": { + "vec": [ + { + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 + } + }, { "key": { "vec": [ diff --git a/contracts/test_snapshots/test/test_events.1.json b/contracts/test_snapshots/test/test_events.1.json index 7dc3e07..772040e 100644 --- a/contracts/test_snapshots/test/test_events.1.json +++ b/contracts/test_snapshots/test/test_events.1.json @@ -37,7 +37,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -85,7 +86,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" @@ -94,34 +95,32 @@ }, "durability": "persistent", "val": { - "i128": "0" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ + { + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } + }, { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 0 + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "0" + } } ] - }, - "durability": "persistent", - "val": { - "bool": false } } }, @@ -168,6 +167,30 @@ "i128": "1000" } }, + { + "key": { + "vec": [ + { + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 + } + }, { "key": { "vec": [ diff --git a/contracts/test_snapshots/test/test_goalbased_flexible_contributions.1.json b/contracts/test_snapshots/test/test_goalbased_flexible_contributions.1.json index 4836703..90e1a91 100644 --- a/contracts/test_snapshots/test/test_goalbased_flexible_contributions.1.json +++ b/contracts/test_snapshots/test/test_goalbased_flexible_contributions.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -270,7 +271,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -279,34 +280,32 @@ }, "durability": "persistent", "val": { - "i128": "2000" - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "2000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, @@ -357,12 +356,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" } ] }, "val": { - "i128": "1" + "u32": 518400 } }, { diff --git a/contracts/test_snapshots/test/test_goalbased_locked_until_target.1.json b/contracts/test_snapshots/test/test_goalbased_locked_until_target.1.json index 7ca8da1..66c4dfe 100644 --- a/contracts/test_snapshots/test/test_goalbased_locked_until_target.1.json +++ b/contracts/test_snapshots/test/test_goalbased_locked_until_target.1.json @@ -59,7 +59,8 @@ }, { "bool": true - } + }, + "void" ] } }, @@ -214,7 +215,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -223,40 +224,38 @@ }, "durability": "persistent", "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 518400 }, { "entry": { @@ -301,12 +300,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" } ] }, "val": { - "i128": "1" + "u32": 518400 } }, { diff --git a/contracts/test_snapshots/test/test_goalbased_over_withdrawal.1.json b/contracts/test_snapshots/test/test_goalbased_over_withdrawal.1.json index 725266f..42bcbb5 100644 --- a/contracts/test_snapshots/test/test_goalbased_over_withdrawal.1.json +++ b/contracts/test_snapshots/test/test_goalbased_over_withdrawal.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -212,7 +213,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -221,40 +222,38 @@ }, "durability": "persistent", "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 518400 }, { "entry": { @@ -299,12 +298,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" } ] }, "val": { - "i128": "1" + "u32": 518400 } }, { diff --git a/contracts/test_snapshots/test/test_goalbased_partial_withdrawal.1.json b/contracts/test_snapshots/test/test_goalbased_partial_withdrawal.1.json index eeb5829..8d6731e 100644 --- a/contracts/test_snapshots/test/test_goalbased_partial_withdrawal.1.json +++ b/contracts/test_snapshots/test/test_goalbased_partial_withdrawal.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -236,7 +237,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -245,40 +246,38 @@ }, "durability": "persistent", "val": { - "i128": "1500" - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1500" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 518400 }, { "entry": { @@ -323,12 +322,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" } ] }, "val": { - "i128": "1" + "u32": 518400 } }, { diff --git a/contracts/test_snapshots/test/test_initialize.1.json b/contracts/test_snapshots/test/test_initialize.1.json index f468536..d5ae1cd 100644 --- a/contracts/test_snapshots/test/test_initialize.1.json +++ b/contracts/test_snapshots/test/test_initialize.1.json @@ -37,7 +37,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -95,6 +96,30 @@ "i128": "1000" } }, + { + "key": { + "vec": [ + { + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 + } + }, { "key": { "vec": [ diff --git a/contracts/test_snapshots/test/test_queue_enforced_payout_order.1.json b/contracts/test_snapshots/test/test_queue_enforced_payout_order.1.json index 0980c56..fcadf2e 100644 --- a/contracts/test_snapshots/test/test_queue_enforced_payout_order.1.json +++ b/contracts/test_snapshots/test/test_queue_enforced_payout_order.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -720,7 +721,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -729,40 +730,38 @@ }, "durability": "persistent", "val": { - "i128": "3000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "Contributions" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "3000" + } } ] - }, - "durability": "persistent", - "val": { - "i128": "3000" } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 1555200 }, { "entry": { @@ -774,49 +773,47 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } ] }, "durability": "persistent", "val": { - "i128": "3000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "3000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1555200 }, { "entry": { @@ -828,49 +825,47 @@ "key": { "vec": [ { - "symbol": "HasContributedThisCycle" + "symbol": "Member" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" } ] }, "durability": "persistent", "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ + { + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } + }, { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 3 + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "3000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1555200 }, { "entry": { @@ -915,12 +910,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "3" + "u32": 3 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 } }, { @@ -1028,7 +1035,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 }, { "entry": { @@ -1773,7 +1780,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 } ] }, diff --git a/contracts/test_snapshots/test/test_remove_last_member_clears_cycle_count.1.json b/contracts/test_snapshots/test/test_remove_last_member_clears_cycle_count.1.json index 9a4e4a5..af61300 100644 --- a/contracts/test_snapshots/test/test_remove_last_member_clears_cycle_count.1.json +++ b/contracts/test_snapshots/test/test_remove_last_member_clears_cycle_count.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -222,33 +223,6 @@ }, "live_until": 6311999 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Contributions" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -292,12 +266,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" } ] }, "val": { - "i128": "1" + "u32": 518400 } }, { diff --git a/contracts/test_snapshots/test/test_remove_member_adjusts_cycle_count.1.json b/contracts/test_snapshots/test/test_remove_member_adjusts_cycle_count.1.json index f851083..621e944 100644 --- a/contracts/test_snapshots/test/test_remove_member_adjusts_cycle_count.1.json +++ b/contracts/test_snapshots/test/test_remove_member_adjusts_cycle_count.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -389,7 +390,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -398,67 +399,38 @@ }, "durability": "persistent", "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "Contributions" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Contributions" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1000" + } } ] - }, - "durability": "persistent", - "val": { - "i128": "0" } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 1555200 }, { "entry": { @@ -470,49 +442,47 @@ "key": { "vec": [ { - "symbol": "HasContributedThisCycle" + "symbol": "Member" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } ] }, "durability": "persistent", "val": { - "bool": false - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": false } } }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 }, { "entry": { @@ -557,12 +527,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "0" + "u32": 2 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 } }, { @@ -655,7 +637,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 }, { "entry": { @@ -1220,7 +1202,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 } ] }, diff --git a/contracts/test_snapshots/test/test_remove_member_after_payout_panics.1.json b/contracts/test_snapshots/test/test_remove_member_after_payout_panics.1.json index b46059f..6733d3f 100644 --- a/contracts/test_snapshots/test/test_remove_member_after_payout_panics.1.json +++ b/contracts/test_snapshots/test/test_remove_member_after_payout_panics.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -311,7 +312,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -320,40 +321,38 @@ }, "durability": "persistent", "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "Contributions" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": true + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1000" + } } ] - }, - "durability": "persistent", - "val": { - "i128": "1000" } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 1036800 }, { "entry": { @@ -365,49 +364,47 @@ "key": { "vec": [ { - "symbol": "HasContributedThisCycle" + "symbol": "Member" }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" } ] }, "durability": "persistent", "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 1036800 }, { "entry": { @@ -452,12 +449,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "2" + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 } }, { @@ -562,7 +571,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 }, { "entry": { @@ -995,7 +1004,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 } ] }, diff --git a/contracts/test_snapshots/test/test_remove_member_no_contribution.1.json b/contracts/test_snapshots/test/test_remove_member_no_contribution.1.json index 33b8197..9a09f82 100644 --- a/contracts/test_snapshots/test/test_remove_member_no_contribution.1.json +++ b/contracts/test_snapshots/test/test_remove_member_no_contribution.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -185,7 +186,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -194,61 +195,32 @@ }, "durability": "persistent", "val": { - "i128": "0" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "Contributions" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "0" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 0 + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "0" + } } ] - }, - "durability": "persistent", - "val": { - "bool": false } } }, @@ -295,6 +267,30 @@ "i128": "1000" } }, + { + "key": { + "vec": [ + { + "symbol": "CurrentCycleId" + } + ] + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 + } + }, { "key": { "vec": [ @@ -382,7 +378,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 }, { "entry": { @@ -579,7 +575,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 } ] }, diff --git a/contracts/test_snapshots/test/test_remove_member_with_contribution_refund.1.json b/contracts/test_snapshots/test/test_remove_member_with_contribution_refund.1.json index 437ed75..3cc997f 100644 --- a/contracts/test_snapshots/test/test_remove_member_with_contribution_refund.1.json +++ b/contracts/test_snapshots/test/test_remove_member_with_contribution_refund.1.json @@ -57,7 +57,8 @@ "void", { "bool": false - } + }, + "void" ] } }, @@ -317,7 +318,7 @@ "key": { "vec": [ { - "symbol": "Contributions" + "symbol": "Member" }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -326,67 +327,38 @@ }, "durability": "persistent", "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ + "map": [ { - "symbol": "Contributions" + "key": { + "symbol": "has_received_payout" + }, + "val": { + "bool": false + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "HasContributedThisCycle" + "key": { + "symbol": "last_contribution_cycle_id" + }, + "val": { + "u32": 1 + } }, { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "key": { + "symbol": "total_contributions" + }, + "val": { + "i128": "1000" + } } ] - }, - "durability": "persistent", - "val": { - "bool": true } } }, "ext": "v0" }, - "live_until": 4095 + "live_until": 1036800 }, { "entry": { @@ -431,12 +403,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "2" + "u32": 1 + } + }, + { + "key": { + "vec": [ + { + "symbol": "CycleLengthLedgers" + } + ] + }, + "val": { + "u32": 518400 } }, { @@ -538,7 +522,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 }, { "entry": { @@ -971,7 +955,7 @@ }, "ext": "v0" }, - "live_until": 518400 + "live_until": 1036800 } ] }, diff --git a/contracts/test_snapshots/test/test_trigger_payout_non_member.1.json b/contracts/test_snapshots/test/test_trigger_payout_non_member.1.json index 6978b48..5f784b4 100644 --- a/contracts/test_snapshots/test/test_trigger_payout_non_member.1.json +++ b/contracts/test_snapshots/test/test_trigger_payout_non_member.1.json @@ -1,6 +1,6 @@ { "generators": { - "address": 7, + "address": 4, "nonce": 0, "mux_id": 0 }, @@ -57,183 +57,15 @@ "void", { "bool": false - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "add_member", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "add_member", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "mint", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "i128": "5000" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "mint", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, - { - "i128": "5000" - } + "void" ] } }, "sub_invocations": [] } ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "contribute", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [ - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "transfer", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [] - } - ] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "contribute", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [ - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "transfer", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [] - } - ] - } - ] - ], - [] + ] ], "ledger": { "protocol_version": 27, @@ -286,114 +118,6 @@ }, "live_until": 6311999 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Contributions" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Contributions" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "HasContributedThisCycle" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "HasContributedThisCycle" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -437,24 +161,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "2" + "u32": 1 } }, { "key": { "vec": [ { - "symbol": "CycleMemberCount" + "symbol": "CycleLengthLedgers" } ] }, "val": { - "i128": "2" + "u32": 518400 } }, { @@ -494,14 +218,7 @@ ] }, "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] + "vec": [] } }, { @@ -516,18 +233,6 @@ "string": "Test Group" } }, - { - "key": { - "vec": [ - { - "symbol": "NextPayoutIndex" - } - ] - }, - "val": { - "u32": 0 - } - }, { "key": { "vec": [ @@ -549,46 +254,6 @@ }, "live_until": 518400 }, - { - "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": "4837995959683129791" - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - "live_until": 6311999 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -609,242 +274,6 @@ }, "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "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": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "key": { - "vec": [ - { - "symbol": "Balance" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": "2000" - } - }, - { - "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": { - "vec": [ - { - "symbol": "Balance" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": "4000" - } - }, - { - "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": { - "vec": [ - { - "symbol": "Balance" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": "4000" - } - }, - { - "key": { - "symbol": "authorized" - }, - "val": { - "bool": true - } - }, - { - "key": { - "symbol": "clawback" - }, - "val": { - "bool": false - } - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -964,5 +393,39 @@ } ] }, - "events": [] + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "init" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "string": "Test Group" + }, + { + "i128": "1000" + } + ] + } + } + } + }, + "failed_call": false + } + ] } \ No newline at end of file diff --git a/contracts/test_snapshots/test/test_trigger_payout_pool_not_full.1.json b/contracts/test_snapshots/test/test_trigger_payout_pool_not_full.1.json index 38f73e0..5f784b4 100644 --- a/contracts/test_snapshots/test/test_trigger_payout_pool_not_full.1.json +++ b/contracts/test_snapshots/test/test_trigger_payout_pool_not_full.1.json @@ -1,6 +1,6 @@ { "generators": { - "address": 6, + "address": 4, "nonce": 0, "mux_id": 0 }, @@ -57,140 +57,15 @@ "void", { "bool": false - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "add_member", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "add_member", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "mint", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "i128": "5000" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "mint", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, - { - "i128": "5000" - } + "void" ] } }, "sub_invocations": [] } ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "contribute", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [ - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "transfer", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [] - } - ] - } - ] - ], - [] + ] ], "ledger": { "protocol_version": 27, @@ -243,114 +118,6 @@ }, "live_until": 6311999 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Contributions" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Contributions" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "0" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "HasContributedThisCycle" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "HasContributedThisCycle" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "bool": false - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -394,24 +161,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "1" + "u32": 1 } }, { "key": { "vec": [ { - "symbol": "CycleMemberCount" + "symbol": "CycleLengthLedgers" } ] }, "val": { - "i128": "2" + "u32": 518400 } }, { @@ -451,14 +218,7 @@ ] }, "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] + "vec": [] } }, { @@ -473,18 +233,6 @@ "string": "Test Group" } }, - { - "key": { - "vec": [ - { - "symbol": "NextPayoutIndex" - } - ] - }, - "val": { - "u32": 0 - } - }, { "key": { "vec": [ @@ -506,46 +254,6 @@ }, "live_until": 518400 }, - { - "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": "4837995959683129791" - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - "live_until": 6311999 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -566,222 +274,6 @@ }, "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "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": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "key": { - "vec": [ - { - "symbol": "Balance" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": "1000" - } - }, - { - "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": { - "vec": [ - { - "symbol": "Balance" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": "4000" - } - }, - { - "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": { - "vec": [ - { - "symbol": "Balance" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "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, @@ -901,5 +393,39 @@ } ] }, - "events": [] + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "init" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "string": "Test Group" + }, + { + "i128": "1000" + } + ] + } + } + } + }, + "failed_call": false + } + ] } \ No newline at end of file diff --git a/contracts/test_snapshots/test/test_trigger_payout_success.1.json b/contracts/test_snapshots/test/test_trigger_payout_success.1.json index 8bb5f65..5f784b4 100644 --- a/contracts/test_snapshots/test/test_trigger_payout_success.1.json +++ b/contracts/test_snapshots/test/test_trigger_payout_success.1.json @@ -1,6 +1,6 @@ { "generators": { - "address": 6, + "address": 4, "nonce": 0, "mux_id": 0 }, @@ -57,206 +57,15 @@ "void", { "bool": false - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "add_member", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "add_member", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "mint", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "i128": "5000" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "mint", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "i128": "5000" - } - ] - } - }, - "sub_invocations": [] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "contribute", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [ - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "transfer", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [] - } - ] - } - ] - ], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "contribute", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [ - { - "function": { - "contract_fn": { - "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "function_name": "transfer", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" - }, - { - "i128": "1000" - } - ] - } - }, - "sub_invocations": [] - } - ] - } - ] - ], - [], - [ - [ - "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - { - "function": { - "contract_fn": { - "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "function_name": "trigger_payout", - "args": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } + "void" ] } }, "sub_invocations": [] } ] - ], - [] + ] ], "ledger": { "protocol_version": 27, @@ -309,114 +118,6 @@ }, "live_until": 6311999 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Contributions" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "Contributions" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "i128": "1000" - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "HasContributedThisCycle" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", - "key": { - "vec": [ - { - "symbol": "HasContributedThisCycle" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "bool": true - } - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -460,24 +161,24 @@ "key": { "vec": [ { - "symbol": "CurrentCycleContributions" + "symbol": "CurrentCycleId" } ] }, "val": { - "i128": "2" + "u32": 1 } }, { "key": { "vec": [ { - "symbol": "CycleMemberCount" + "symbol": "CycleLengthLedgers" } ] }, "val": { - "i128": "2" + "u32": 518400 } }, { @@ -517,14 +218,7 @@ ] }, "val": { - "vec": [ - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] + "vec": [] } }, { @@ -539,18 +233,6 @@ "string": "Test Group" } }, - { - "key": { - "vec": [ - { - "symbol": "NextPayoutIndex" - } - ] - }, - "val": { - "u32": 1 - } - }, { "key": { "vec": [ @@ -572,46 +254,6 @@ }, "live_until": 518400 }, - { - "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": "4837995959683129791" - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - "live_until": 6311999 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -632,262 +274,6 @@ }, "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", - "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "key": { - "ledger_key_nonce": { - "nonce": "5806905060045992000" - } - }, - "durability": "temporary", - "val": "void" - } - }, - "ext": "v0" - }, - "live_until": 6311999 - }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_data": { - "ext": "v0", - "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", - "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": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "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": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN", - "key": { - "vec": [ - { - "symbol": "Balance" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": "6000" - } - }, - { - "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": { - "vec": [ - { - "symbol": "Balance" - }, - { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" - } - ] - }, - "durability": "persistent", - "val": { - "map": [ - { - "key": { - "symbol": "amount" - }, - "val": { - "i128": "4000" - } - }, - { - "key": { - "symbol": "authorized" - }, - "val": { - "bool": true - } - }, - { - "key": { - "symbol": "clawback" - }, - "val": { - "bool": false - } - } - ] - } - } - }, - "ext": "v0" - }, - "live_until": 518400 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -1007,5 +393,39 @@ } ] }, - "events": [] + "events": [ + { + "event": { + "ext": "v0", + "contract_id": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "init" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN" + }, + { + "string": "Test Group" + }, + { + "i128": "1000" + } + ] + } + } + } + }, + "failed_call": false + } + ] } \ No newline at end of file