1

当使用任何铸造/销毁基础货币的函数(例如Currency::withdraw())时,您将获得一个Imbalance返回值。Substrate 是否希望我用它做点什么?

4

1 回答 1

1

每当您在 Balances 模块(、、等...)中Imbalance执行某些“单向操作”时,您都会返回 an 。depositslashwithdraw

两者都PositiveImbalance实现NegativeImbalanceDroptrait,它定义了一个析构函数,当变量超出范围时调用该函数。

在 a 的情况下Imbalance,该drop函数只是简单地更新 balances 模块的总发行量,以确保所有经常账户余额的总和等于总发行量。

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

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 {...}
}
于 2019-05-28T12:00:11.590 回答