diff --git a/pallets/networks/src/lib.rs b/pallets/networks/src/lib.rs index 82152b9..d5307b6 100644 --- a/pallets/networks/src/lib.rs +++ b/pallets/networks/src/lib.rs @@ -878,23 +878,25 @@ impl NetworkDataMutateHandler> for Pallet::try_mutate(network_id, |gatekeeper_amount| -> Result<(), ()> { - *gatekeeper_amount = gatekeeper_amount.checked_add(&amount).ok_or(())?; - Ok(()) - })?; + let increased_gatekeeper_amount = GatekeeperAmounts::::get(network_id) + .checked_add(&amount) + .ok_or(())?; let curve_share = Perbill::from_parts(incoming_share).mul_ceil(amount); let final_amount = amount.saturating_sub(curve_share); - NetworkImbalance::::try_mutate(|imbalance_state| -> Result<(), ()> { - imbalance_state.incoming = imbalance_state.incoming - .checked_add(&final_amount) - .ok_or(())?; - imbalance_state.curve_share = imbalance_state.curve_share - .checked_add(&curve_share) - .ok_or(())?; - Ok(()) - })?; + let mut imbalance_state = NetworkImbalance::::get(); + + imbalance_state.incoming = imbalance_state.incoming + .checked_add(&final_amount) + .ok_or(())?; + + imbalance_state.curve_share = imbalance_state.curve_share + .checked_add(&curve_share) + .ok_or(())?; + + GatekeeperAmounts::::insert(network_id, increased_gatekeeper_amount); + NetworkImbalance::::put(imbalance_state); Ok(final_amount) } @@ -907,23 +909,25 @@ impl NetworkDataMutateHandler> for Pallet::try_mutate(network_id, |gatekeeper_amount| -> Result<(), ()> { - *gatekeeper_amount = gatekeeper_amount.checked_sub(&amount).ok_or(())?; - Ok(()) - })?; + let decreased_gatekeeper_amount = GatekeeperAmounts::::get(network_id) + .checked_sub(&amount) + .ok_or(())?; let curve_share = Perbill::from_parts(outgoing_share).mul_ceil(amount); let final_amount = amount.saturating_sub(curve_share); - NetworkImbalance::::try_mutate(|imbalance_state| -> Result<(), ()> { - imbalance_state.outgoing = imbalance_state.outgoing - .checked_add(&final_amount) - .ok_or(())?; - imbalance_state.curve_share = imbalance_state.curve_share - .checked_add(&curve_share) - .ok_or(())?; - Ok(()) - })?; + let mut imbalance_state = NetworkImbalance::::get(); + + imbalance_state.outgoing = imbalance_state.outgoing + .checked_add(&final_amount) + .ok_or(())?; + + imbalance_state.curve_share = imbalance_state.curve_share + .checked_add(&curve_share) + .ok_or(())?; + + GatekeeperAmounts::::insert(network_id, decreased_gatekeeper_amount); + NetworkImbalance::::put(imbalance_state); Ok(final_amount) }