diff --git a/contracts/fair-burn/src/contract.rs b/contracts/fair-burn/src/contract.rs index e5cdef6..43b568c 100644 --- a/contracts/fair-burn/src/contract.rs +++ b/contracts/fair-burn/src/contract.rs @@ -1,6 +1,6 @@ use cosmwasm_std::{ - ensure, to_binary, Addr, BankMsg, Binary, Coin, Decimal, Deps, DepsMut, Env, Event, - MessageInfo, StdResult, Uint128, + ensure, to_binary, Addr, BankMsg, Binary, Coin, Deps, DepsMut, Env, Event, MessageInfo, + StdResult, }; use cw2::{get_contract_version, set_contract_version}; use cw_utils::{maybe_addr, NativeBalance}; @@ -9,7 +9,7 @@ use std::collections::BTreeMap; use crate::{ error::ContractError, - helpers::calculate_payouts, + helpers::{bps_to_decimal, calculate_payouts}, msg::{ExecuteMsg, InstantiateMsg, QueryMsg, SudoMsg}, state::{Config, CONFIG}, }; @@ -31,7 +31,7 @@ pub fn instantiate( set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; let config = Config { - fee_percent: Decimal::percent(msg.fee_bps) / Uint128::from(100u64), + fee_percent: bps_to_decimal(msg.fee_bps), }; config.save(deps.storage)?; @@ -65,14 +65,11 @@ pub fn execute_fair_burn( info: MessageInfo, recipient: Option, ) -> Result { - ensure!( - !info.funds.is_empty(), - ContractError::InvalidInput("must send some coins".to_string()) - ); - let mut funds_normalized = NativeBalance(info.funds); funds_normalized.normalize(); + ensure!(!funds_normalized.is_empty(), ContractError::ZeroFunds); + let mut response = Response::new(); let config = CONFIG.load(deps.storage)?; @@ -164,20 +161,17 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { #[cfg_attr(not(feature = "library"), entry_point)] pub fn sudo(deps: DepsMut, _env: Env, msg: SudoMsg) -> Result { match msg { - SudoMsg::UpdateConfig { fair_burn_bps } => sudo_update_config(deps, fair_burn_bps), + SudoMsg::UpdateConfig { fee_bps } => sudo_update_config(deps, fee_bps), } } -pub fn sudo_update_config( - deps: DepsMut, - fair_burn_bps: Option, -) -> Result { +pub fn sudo_update_config(deps: DepsMut, fee_bps: Option) -> Result { let mut config = CONFIG.load(deps.storage)?; let mut event = Event::new("sudo-update-config"); - if let Some(fair_burn_bps) = fair_burn_bps { - config.fee_percent = Decimal::percent(fair_burn_bps) / Uint128::from(100u128); + if let Some(fee_bps) = fee_bps { + config.fee_percent = bps_to_decimal(fee_bps); event = event.add_attribute("fee_percent", config.fee_percent.to_string()); } @@ -280,7 +274,7 @@ mod tests { let new_fee_bps = 4000; let sudo_msg = SudoMsg::UpdateConfig { - fair_burn_bps: Some(new_fee_bps), + fee_bps: Some(new_fee_bps), }; let response = app.sudo(CwSudoMsg::Wasm(WasmSudo { contract_addr: fair_burn.clone(), diff --git a/contracts/fair-burn/src/error.rs b/contracts/fair-burn/src/error.rs index ef85c39..9e4ae52 100644 --- a/contracts/fair-burn/src/error.rs +++ b/contracts/fair-burn/src/error.rs @@ -6,6 +6,9 @@ pub enum ContractError { #[error("{0}")] Std(#[from] StdError), - #[error("Invalid input: {0}")] - InvalidInput(String), + #[error("Zero funds: must send non-zero funds to this contract")] + ZeroFunds, + + #[error("Invalid config: {0}")] + InvalidConfig(String), } diff --git a/contracts/fair-burn/src/helpers.rs b/contracts/fair-burn/src/helpers.rs index 1e7ea80..507d238 100644 --- a/contracts/fair-burn/src/helpers.rs +++ b/contracts/fair-burn/src/helpers.rs @@ -1,4 +1,4 @@ -use cosmwasm_std::{coin, to_binary, Addr, Coin, Uint128, WasmMsg}; +use cosmwasm_std::{coin, to_binary, Addr, Coin, Decimal, Uint128, WasmMsg}; use sg_std::Response; use crate::{msg::ExecuteMsg, state::Config}; @@ -32,3 +32,7 @@ pub fn append_fair_burn_msg( funds, }) } + +pub fn bps_to_decimal(bps: u64) -> Decimal { + Decimal::percent(bps) / Uint128::from(100u64) +} diff --git a/contracts/fair-burn/src/msg.rs b/contracts/fair-burn/src/msg.rs index 2b885d1..2ab2602 100644 --- a/contracts/fair-burn/src/msg.rs +++ b/contracts/fair-burn/src/msg.rs @@ -25,5 +25,5 @@ pub enum QueryMsg { #[cw_serde] pub enum SudoMsg { - UpdateConfig { fair_burn_bps: Option }, + UpdateConfig { fee_bps: Option }, } diff --git a/contracts/fair-burn/src/state.rs b/contracts/fair-burn/src/state.rs index 9d04f4c..b942807 100644 --- a/contracts/fair-burn/src/state.rs +++ b/contracts/fair-burn/src/state.rs @@ -20,7 +20,7 @@ impl Config { fn validate(&self) -> Result<(), ContractError> { ensure!( self.fee_percent > Decimal::zero(), - ContractError::InvalidInput("fee_percent must be positive".to_string()) + ContractError::InvalidConfig("fee_percent must be positive".to_string()) ); Ok(()) }