使用任何铸造/燃烧基础货币的功能时(例如Currency::withdraw()
),您将获得一个Imbalance
返回值。 Substrate希望我对此做些什么?
答案 0 :(得分:1)
每执行一次"one-sided operation" within the Balances module(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 {...}
}