更多 Balance 函数

定义 Balance 对象的 sui::balance 模块还提供了一些值得注意的函数:

  1. value 返回 Balance 对象中的代币数量:
/// 获取储存在`Balance`里的值. public fun value<T>(self: &Balance<T>): u64 { self.value }
  1. join 接受一个可变的 Balance 和另一个 Balance,并将第二个 Balance 添加到第一个 Balance 中:
/// 结合两个Balance. public fun join<T>(self: &mut Balance<T>, balance: Balance<T>): u64 { let Balance { value } = balance; self.value = self.value + value; self.value }
  1. split 从一个可变的 Balance 中提取一定数量的代币,并创建第二个 Balance:
/// 拆分一个 `Balance` 并从中获取一个子余额。 public fun split<T>(self: &mut Balance<T>, value: u64): Balance<T> { assert!(self.value >= value, ENotEnough); self.value = self.value - value; Balance { value } }
  1. withdraw_all 类似于 split,但会提取所有可变余额中的代币,将其清空:
/// 提取所有余额. 之后余额将为0. public fun withdraw_all<T>(self: &mut Balance<T>): Balance<T> { let value = self.value; split(self, value) }

通过这些不同的函数,开发人员可以在从用户拥有的 Coin 对象中取出余额后,进行更复杂的操作。 余额可以拆分和合并,将一定数量的代币分成更小的部分并发送到不同的钱包中。这在处理费用时非常常见,例如:

/// 提取所有余额. 之后余额将为0. public fun trade(wallet: &mut Coin<Sui>, amount: u64) { let coins_to_trade = balance::split(coin::balance_mut(wallet), amount); // 1% 手续费. let fees = balance::split(&mut coins_to_trade, amount / 100); // 将手续费存到某个地方然后继续交易 }