提取或存款后是否必须处理“不平衡”类型?

时间:2019-05-28 11:35:26

标签: rust substrate

使用任何铸造/燃烧基础货币的功能时(例如Currency::withdraw()),您将获得一个Imbalance返回值。 Substrate希望我对此做些什么?

1 个答案:

答案 0 :(得分:1)

每执行一次"one-sided operation" within the Balances moduleImbalancedepositslash等),您就得到一个withdraw

PositiveImbalanceNegativeImbalance都实现了Drop特性,该特性定义了一个析构函数,当变量超出范围时将调用该析构函数。

对于Imbalancedrop函数只是更新余额模块的总发行额,以确保所有经常账户余额的总和等于总发行额。

因此,默认情况下,不,您不需要对返回的不平衡进行任何操作。您可以将“单面操作”的结果放入未使用的变量中,如下所示:

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 {...}
}