diff --git a/contracts/finance/andromeda-splitter/src/contract.rs b/contracts/finance/andromeda-splitter/src/contract.rs index 5fff11766..9e58e1fa6 100644 --- a/contracts/finance/andromeda-splitter/src/contract.rs +++ b/contracts/finance/andromeda-splitter/src/contract.rs @@ -168,20 +168,22 @@ fn execute_send(ctx: ExecuteContext) -> Result { let recipient_percent = recipient_addr.percent; let mut vec_coin: Vec = Vec::new(); for (i, coin) in info.funds.clone().iter().enumerate() { - let mut recip_coin: Coin = coin.clone(); - recip_coin.amount = coin.amount * recipient_percent; - remainder_funds[i].amount = remainder_funds[i].amount.checked_sub(recip_coin.amount)?; - vec_coin.push(recip_coin.clone()); - amp_funds.push(recip_coin); + let amount_owed = coin.amount.mul_floor(recipient_percent); + if !amount_owed.is_zero() { + let mut recip_coin: Coin = coin.clone(); + recip_coin.amount = amount_owed; + remainder_funds[i].amount = + remainder_funds[i].amount.checked_sub(recip_coin.amount)?; + vec_coin.push(recip_coin.clone()); + amp_funds.push(recip_coin); + } + } + if !vec_coin.is_empty() { + let amp_msg = recipient_addr + .recipient + .generate_amp_msg(&deps.as_ref(), Some(vec_coin))?; + pkt = pkt.add_message(amp_msg); } - - // let direct_message = recipient_addr - // .recipient - // .generate_direct_msg(&deps.as_ref(), vec_coin)?; - let amp_msg = recipient_addr - .recipient - .generate_amp_msg(&deps.as_ref(), Some(vec_coin))?; - pkt = pkt.add_message(amp_msg); } remainder_funds.retain(|x| x.amount > Uint128::zero()); @@ -259,12 +261,6 @@ fn execute_update_lock( let mut splitter = SPLITTER.load(deps.storage)?; - // Can't call this function while the lock isn't expired - - ensure!( - splitter.lock.is_expired(&env.block), - ContractError::ContractLocked {} - ); // Get current time let current_time = Milliseconds::from_seconds(env.block.time.seconds());