Skip to content

Commit

Permalink
Merge pull request #111 from NibiruChain/feat/some-refactors-airdrop
Browse files Browse the repository at this point in the history
add some refactors to airdrop contract
  • Loading branch information
jgimeno authored Jan 5, 2024
2 parents bd792e4 + 902b788 commit dd90c9a
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 23 deletions.
33 changes: 13 additions & 20 deletions contracts/airdrop/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,29 +103,22 @@ pub fn reward_users(
) -> Result<Response, StdError> {
let mut res = vec![];

let mut campaign = CAMPAIGN.load(deps.storage).map_err(|_| {
StdError::generic_err("Failed to load campaign data")
})?;

if campaign.owner != info.sender
&& !campaign.managers.contains(&info.sender)
{
return Err(StdError::generic_err("Unauthorized"));
}

for req in requests {
let mut campaign = CAMPAIGN.load(deps.storage).map_err(|_| {
StdError::generic_err("Failed to load campaign data")
})?;

if campaign.owner != info.sender
&& !campaign.managers.contains(&info.sender)
{
res.push(RewardUserResponse {
user_address: req.user_address.clone(),
success: false,
error_msg: "Unauthorized".to_string(),
});
continue;
}

if campaign.unallocated_amount < req.amount {
res.push(RewardUserResponse {
user_address: req.user_address.clone(),
success: false,
error_msg: "Not enough funds in campaign".to_string(),
});
continue;
return Err(StdError::generic_err(
"Not enough funds in the campaign",
));
}

match USER_REWARDS.may_load(deps.storage, req.user_address.clone())? {
Expand Down
45 changes: 44 additions & 1 deletion contracts/airdrop/src/tests/execute/reward_users.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::contract::{instantiate, reward_users};
use crate::msg::{InstantiateMsg, RewardUserRequest, RewardUserResponse};
use crate::state::{Campaign, CAMPAIGN, USER_REWARDS};
use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info};
use cosmwasm_std::{coins, from_json, Addr, Uint128};
use cosmwasm_std::{coins, from_json, Addr, Uint128, StdError};
use std::vec;

#[test]
Expand Down Expand Up @@ -171,3 +171,46 @@ fn test_reward_users_as_manager() {
Uint128::new(250)
);
}

#[test]
fn test_fails_when_we_try_to_allocate_more_than_available() {
let mut deps = mock_dependencies();
let env = mock_env();

instantiate(
deps.as_mut(),
env.clone(),
mock_info("owner", &coins(1000, "")),
InstantiateMsg {
campaign_id: "campaign_id".to_string(),
campaign_name: "campaign_name".to_string(),
campaign_description: "campaign_description".to_string(),
managers: vec![Addr::unchecked("manager1"), Addr::unchecked("manager2")],
},
)
.unwrap();

let resp = reward_users(
deps.as_mut(),
env.clone(),
mock_info("manager1", &[]),
vec![
RewardUserRequest {
user_address: Addr::unchecked("user1"),
amount: Uint128::new(750),
},
RewardUserRequest {
user_address: Addr::unchecked("user2"),
amount: Uint128::new(250),
},
RewardUserRequest {
user_address: Addr::unchecked("user3"),
amount: Uint128::new(251),
},
],
);

assert_eq!(resp, Err(StdError::generic_err(
"Not enough funds in the campaign",
)));
}
2 changes: 0 additions & 2 deletions nibiru-std/src/proto/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ mod type_url_cosmos;
mod type_url_nibiru;

pub use traits::*;
pub use type_url_cosmos::*;
pub use type_url_nibiru::*;

pub mod cosmos {
/// Authentication of accounts and transactions.
Expand Down

0 comments on commit dd90c9a

Please sign in to comment.