取款或存款后是否必须处理“不平衡”类型?
Is handling the `Imbalance` type mandatory after withdraw or deposit?
当使用 mint/burn 基础货币(例如 Currency::withdraw()
)的任何函数时,您将得到一个 Imbalance
return 值。 Substrate 希望我用它做点什么吗?
每当您执行某些 "one-sided operation" within the Balances module(deposit
、slash
、withdraw
等...)时,您都会得到一个 Imbalance
。
PositiveImbalance
和 NegativeImbalance
都实现了 Drop
特性,它定义了一个析构函数,当变量超出范围时调用该函数。
在Imbalance
的情况下,drop
函数只是更新余额模块的总发行量,以确保所有当前账户余额的总和等于总发行量。
所以默认情况下,不,您不需要对返回给您的不平衡做任何事情。您可以将 "one-sided operation" 的结果放入一个像这样未使用的变量:
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 {...}
}
当使用 mint/burn 基础货币(例如 Currency::withdraw()
)的任何函数时,您将得到一个 Imbalance
return 值。 Substrate 希望我用它做点什么吗?
每当您执行某些 "one-sided operation" within the Balances module(deposit
、slash
、withdraw
等...)时,您都会得到一个 Imbalance
。
PositiveImbalance
和 NegativeImbalance
都实现了 Drop
特性,它定义了一个析构函数,当变量超出范围时调用该函数。
在Imbalance
的情况下,drop
函数只是更新余额模块的总发行量,以确保所有当前账户余额的总和等于总发行量。
所以默认情况下,不,您不需要对返回给您的不平衡做任何事情。您可以将 "one-sided operation" 的结果放入一个像这样未使用的变量:
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 {...}
}