avoid errors from minting sub-existential balance

Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
This commit is contained in:
Uncle Stinky
2025-06-13 16:42:14 +03:00
parent 7be24ed139
commit 5beb22f116
4 changed files with 53 additions and 26 deletions

View File

@@ -28,7 +28,7 @@ use sp_runtime::{
self as rt_offchain, HttpError,
storage::{MutateStorageError, StorageRetrievalError, StorageValueRef},
},
traits::{CheckedSub, BlockNumberProvider, Convert, Saturating},
traits::{BlockNumberProvider, Convert, Saturating},
};
use sp_std::{
vec::Vec, prelude::*,
@@ -330,6 +330,7 @@ pub mod pallet {
UnregisteredClapRemove,
TooMuchAuthorities,
CouldNotAccumulateCommission,
CouldNotAccumulateIncomingImbalance,
CouldNotIncreaseGatekeeperAmount,
}
@@ -580,25 +581,21 @@ impl<T: Config> Pallet<T> {
.map(|network_data| Perbill::from_parts(network_data.incoming_fee))
.unwrap_or_default()
.mul_ceil(clap.amount);
let final_amount = clap.amount.saturating_sub(commission);
let final_amount = clap.amount
.checked_sub(&commission)
.map(|value| T::Currency::minimum_balance()
.lt(&value)
.then(|| value)
)
.flatten()
.unwrap_or_default();
let _ = T::NetworkDataHandler::increase_gatekeeper_amount(&clap.network_id, &final_amount)
let _ = T::NetworkDataHandler::increase_gatekeeper_amount(&clap.network_id, &clap.amount)
.map_err(|_| Error::<T>::CouldNotIncreaseGatekeeperAmount)?;
let _ = T::NetworkDataHandler::accumulate_incoming_imbalance(&final_amount)
.map_err(|_| Error::<T>::CouldNotAccumulateIncomingImbalance)?;
let _ = T::NetworkDataHandler::accumulate_commission(&commission)
.map_err(|_| Error::<T>::CouldNotAccumulateCommission)?;
T::Currency::mint_into(
&clap.receiver,
final_amount
)?;
if final_amount > T::Currency::minimum_balance() {
T::Currency::mint_into(
&clap.receiver,
final_amount
)?;
}
*is_applaused = true;