Вы получаете 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 {...}
}