From b1cb5769813049482a7f8a5547ef76c5eece4e93 Mon Sep 17 00:00:00 2001 From: Philip Offtermatt Date: Mon, 1 Jul 2024 13:35:56 +0200 Subject: [PATCH] Deduplicate whitelist and admins --- contracts/atom_wars/src/contract.rs | 18 +++++++++++++----- contracts/atom_wars/src/testing.rs | 29 ++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/contracts/atom_wars/src/contract.rs b/contracts/atom_wars/src/contract.rs index 001941d..821102c 100644 --- a/contracts/atom_wars/src/contract.rs +++ b/contracts/atom_wars/src/contract.rs @@ -63,12 +63,20 @@ pub fn instantiate( PROP_ID.save(deps.storage, &0)?; let mut whitelist_admins: Vec = vec![]; + let mut whitelist: Vec = vec![]; for admin in msg.whitelist_admins { - whitelist_admins.push(deps.api.addr_validate(&admin)?); + let admin_addr = deps.api.addr_validate(&admin)?; + if !whitelist_admins.contains(&admin_addr) { + whitelist_admins.push(admin_addr.clone()); + } + } + for covenant in msg.initial_whitelist { + if !whitelist.contains(&covenant) { + whitelist.push(covenant.clone()); + } } - WHITELIST_ADMINS.save(deps.storage, &whitelist_admins)?; - WHITELIST.save(deps.storage, &msg.initial_whitelist)?; + WHITELIST.save(deps.storage, &whitelist)?; // For each tranche, create a tranche in the TRANCHE_MAP and set the total power to 0 let mut tranche_ids = std::collections::HashSet::new(); @@ -875,11 +883,11 @@ fn query_user_lockups( .collect() } -fn query_whitelist(deps: Deps) -> StdResult> { +pub fn query_whitelist(deps: Deps) -> StdResult> { WHITELIST.load(deps.storage) } -fn query_whitelist_admins(deps: Deps) -> StdResult> { +pub fn query_whitelist_admins(deps: Deps) -> StdResult> { WHITELIST_ADMINS.load(deps.storage) } diff --git a/contracts/atom_wars/src/testing.rs b/contracts/atom_wars/src/testing.rs index 2f3f27e..708aa16 100644 --- a/contracts/atom_wars/src/testing.rs +++ b/contracts/atom_wars/src/testing.rs @@ -1,4 +1,4 @@ -use crate::contract::MAX_LOCK_ENTRIES; +use crate::contract::{query_whitelist, query_whitelist_admins, MAX_LOCK_ENTRIES}; use crate::query::QueryMsg; use crate::state::Tranche; use crate::{ @@ -59,6 +59,33 @@ fn instantiate_test() { assert_eq!(msg.round_length, constants.round_length); } +#[test] +fn deduplicate_whitelist_admins_test() { + let (mut deps, env, info) = (mock_dependencies(), mock_env(), mock_info("addr0000", &[])); + let mut msg = get_default_instantiate_msg(); + msg.initial_whitelist = vec![ + get_default_covenant_params(), + get_default_covenant_params(), + get_default_covenant_params(), + ]; + msg.whitelist_admins = vec![ + "admin3".to_string(), + "admin2".to_string(), + "admin3".to_string(), + ]; + let res = instantiate(deps.as_mut(), env, info, msg); + assert!(res.is_ok()); + let whitelist = query_whitelist(deps.as_ref()).unwrap(); + let whitelist_admins = query_whitelist_admins(deps.as_ref()).unwrap(); + + assert_eq!(whitelist.len(), 1); + assert_eq!(whitelist[0], get_default_covenant_params()); + + assert_eq!(whitelist_admins.len(), 2); + assert_eq!(whitelist_admins[0], "admin3"); + assert_eq!(whitelist_admins[1], "admin2"); +} + #[test] fn lock_tokens_basic_test() { let user_address = "addr0000";