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";