Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update min reserve price management logic #336

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Remove min reserve price logic from sudo
MightOfOaks committed Jan 20, 2025
commit 2f0335482de533559e7926f4c1cb7e1a0fe7b493
6 changes: 0 additions & 6 deletions contracts/reserve-auction/src/msg.rs
Original file line number Diff line number Diff line change
@@ -125,10 +125,4 @@ pub enum SudoMsg {
halt_buffer_duration: Option<u64>,
halt_postpone_duration: Option<u64>,
},
SetMinReservePrices {
min_reserve_prices: Vec<Coin>,
},
UnsetMinReservePrices {
denoms: Vec<String>,
},
}
49 changes: 1 addition & 48 deletions contracts/reserve-auction/src/sudo.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::error::ContractError;
use crate::helpers::settle_auction;
use crate::msg::SudoMsg;
use crate::state::{auctions, Auction, HaltWindow, CONFIG, HALT_MANAGER, MIN_RESERVE_PRICES};
use crate::state::{auctions, Auction, HaltWindow, CONFIG, HALT_MANAGER};

use cosmwasm_std::{Addr, Coin, Decimal, DepsMut, Env, Event, Order, StdResult};
use cw_storage_plus::Bound;
@@ -40,10 +40,6 @@ pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result<Response, ContractE
halt_buffer_duration,
halt_postpone_duration,
),
SudoMsg::SetMinReservePrices { min_reserve_prices } => {
sudo_set_min_reserve_prices(deps, min_reserve_prices)
}
SudoMsg::UnsetMinReservePrices { denoms } => sudo_unset_min_reserve_prices(deps, denoms),
}
}

@@ -205,46 +201,3 @@ pub fn sudo_update_params(

Ok(Response::new().add_event(event))
}

pub fn sudo_set_min_reserve_prices(
deps: DepsMut,
min_reserve_prices: Vec<Coin>,
) -> Result<Response, ContractError> {
let mut response = Response::new();

for min_reserve_price in min_reserve_prices {
if MIN_RESERVE_PRICES.has(deps.storage, min_reserve_price.denom.clone()) {
return Err(ContractError::InvalidInput(
"found duplicate denom".to_string(),
));
}
MIN_RESERVE_PRICES.save(
deps.storage,
min_reserve_price.denom.clone(),
&min_reserve_price.amount,
)?;
response = response.add_event(
Event::new("set-min-reserve-price")
.add_attribute("denom", min_reserve_price.denom)
.add_attribute("amount", min_reserve_price.amount),
);
}
Ok(response)
}

pub fn sudo_unset_min_reserve_prices(
deps: DepsMut,
denoms: Vec<String>,
) -> Result<Response, ContractError> {
let mut response = Response::new();

for denom in denoms {
if !MIN_RESERVE_PRICES.has(deps.storage, denom.clone()) {
return Err(ContractError::InvalidInput("denom not found".to_string()));
}
MIN_RESERVE_PRICES.remove(deps.storage, denom.clone());
response =
response.add_event(Event::new("unset-min-reserve-price").add_attribute("denom", denom));
}
Ok(response)
}
84 changes: 1 addition & 83 deletions contracts/reserve-auction/src/tests/unit_tests/sudo.rs
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ use crate::tests::{
setup::{setup_auctions::setup_reserve_auction, setup_minters::standard_minter_template},
};

use cosmwasm_std::{coin, Coin, Decimal, Uint128};
use cosmwasm_std::{coin, Decimal, Uint128};
use sg721_base::msg::{CollectionInfoResponse, QueryMsg as Sg721QueryMsg};
use sg_marketplace_common::coin::bps_to_decimal;
use sg_marketplace_common::query::QueryOptions;
@@ -396,85 +396,3 @@ fn try_sudo_update_params() {
"InvalidConfig: extend_duration must be greater than zero"
);
}

#[test]
fn try_sudo_min_reserve_prices() {
let vt = standard_minter_template(1000);
let (mut router, creator, _) = (vt.router, vt.accts.creator, vt.accts.bidder);
let fair_burn = setup_fair_burn(&mut router, creator.clone());
let reserve_auction = setup_reserve_auction(&mut router, creator, fair_burn).unwrap();

setup_block_time(&mut router, GENESIS_MINT_START_TIME, None);

let coins_response: Vec<Coin> = router
.wrap()
.query_wasm_smart(
reserve_auction.clone(),
&QueryMsg::MinReservePrices {
query_options: None,
},
)
.unwrap();

// Duplicate denom throws error
let set_min_reserve_prices_msg = SudoMsg::SetMinReservePrices {
min_reserve_prices: vec![coins_response[0].clone()],
};
let response = router.wasm_sudo(reserve_auction.clone(), &set_min_reserve_prices_msg);
assert_eq!(
response.unwrap_err().to_string(),
"InvalidInput: found duplicate denom"
);

// New denoms can be added
let new_coins = vec![coin(3000000, "uosmo"), coin(4000000, "ujuno")];
let set_min_reserve_prices_msg = SudoMsg::SetMinReservePrices {
min_reserve_prices: new_coins.clone(),
};
let response = router.wasm_sudo(reserve_auction.clone(), &set_min_reserve_prices_msg);
assert!(response.is_ok());

let next_coins_response: Vec<Coin> = router
.wrap()
.query_wasm_smart(
reserve_auction.clone(),
&QueryMsg::MinReservePrices {
query_options: None,
},
)
.unwrap();

let mut expected_coins = coins_response.clone();
expected_coins.extend(new_coins);
assert_eq!(next_coins_response.len(), expected_coins.len());

// Removing non-existent denoms throws error
let unset_min_reserve_prices_msg = SudoMsg::UnsetMinReservePrices {
denoms: vec!["uusd".to_string()],
};
let response = router.wasm_sudo(reserve_auction.clone(), &unset_min_reserve_prices_msg);
assert_eq!(
response.unwrap_err().to_string(),
"InvalidInput: denom not found"
);

// Removing existent denoms is ok
let remove_coins = vec!["uosmo".to_string(), "ujuno".to_string()];
let unset_min_reserve_prices_msg = SudoMsg::UnsetMinReservePrices {
denoms: remove_coins,
};
let response = router.wasm_sudo(reserve_auction.clone(), &unset_min_reserve_prices_msg);
assert!(response.is_ok());

let next_coins_response: Vec<Coin> = router
.wrap()
.query_wasm_smart(
reserve_auction,
&QueryMsg::MinReservePrices {
query_options: None,
},
)
.unwrap();

assert_eq!(next_coins_response.len(), coins_response.len());
}