Вы получаете Imbalance
всякий раз, когда выполняете "односторонняя операция" в модуле "Балансы" (deposit
, slash
, withdraw
и т. д.).
И PositiveImbalance
, и NegativeImbalance
реализуют трейт Drop
, который определяет функцию-деструктор, которая вызывается, когда переменная выходит за пределы области видимости.
В случае Imbalance
функция drop
просто обновляет общую выдачу модуля остатков, чтобы гарантировать, что сумма всех текущих остатков на счетах равна общей выдаче.
Таким образом, по умолчанию нет, с вернувшимся к вам дисбалансом ничего делать не нужно.. Вы можете просто поместить результат «односторонней операции» в неиспользуемую переменную следующим образом:
let _ = <balances::Module<T> as Currency<_>>::withdraw(...)?;
Однако, если вы хотите, вам также предоставляется набор инструментов для управления возвращенными вам дисбалансами:
impl<T: Trait<I>, I: Instance> Imbalance<T::Balance> for NegativeImbalance<T, I> {
type Opposite = PositiveImbalance<T, I>;
fn zero() -> Self {...}
fn drop_zero(self) -> result::Result<(), Self> {...}
fn split(self, amount: T::Balance) -> (Self, Self) {...}
fn merge(mut self, other: Self) -> Self {...}
fn subsume(&mut self, other: Self) {...}
fn offset(self, other: Self::Opposite) -> result::Result<Self, Self::Opposite> {...}
fn peek(&self) -> T::Balance {...}
}