Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ch05-06 DEEP staking 如何影响费用等级

返回本章

先沿资金问问题

先沿资金问问题。“DEEP staking 如何影响费用等级”不是账面说明,而是在回答资产从钱包进入 BalanceManager、被订单锁定、成交后进入 settled/owed,最后由 Vault 收尾的哪一段。

源码入口

沿资金流看

pool.stake 要求 amount > 0,否则 EInvalidStake = 13。它调用 state.process_stake,账户侧 account.add_stake 会把 stake 加入 inactive_stake,并把同等 DEEP 加入 owed_balances,随后 vault 从 BalanceManager 扣 DEEP。

account.update 在新 epoch 把 inactive_stake 转入 active_staketrade_params::taker_fee_for_user(active_stake, volume_in_deep) 规定:当用户 active stake 大于等于 stake_required,且按 DEEP 计价的交易量也大于等于 stake_required,taker fee 减半。否则使用完整 taker fee。

pool.unstake 会调用 state.process_unstake,账户的 remove_stake 把 active 和 inactive stake 清零,并把 DEEP 加回 settled_balances。应用侧应提示 unstake 会清除投票状态,并且 staking 折扣不是当前交易立即生效,而依赖 epoch 刷新和历史交易量。

资金旁白:这条线不要从撮合引擎开始。钱包里的 Coin<T> 先进入 balance_manager.move 的托管余额,成交后的 settled/owed 记录在 account.move,真正资产进出由 vault.move 收尾。读费用和余额时,始终沿这条资金线核对。

费用阅读顺序建议从 packages/deepbook/sources/state/trade_params.move 的当前参数开始,再看 packages/deepbook/sources/state/account.move 中 active stake 和 rebate 记录。pay_with_deep 会把手续费支付资产切到 DEEP,因此交易前检查必须同时覆盖 base/quote 余额、DEEP 余额和 deep price 是否可用。

资金安全判断

  • 交易前同时检查 BalanceManager 余额、授权 proof、pool version 和费用参数。
  • 钱包余额只表示未托管资产;下单可用余额必须来自 balance_manager.move 的 manager 余额。
  • 涉及费用或返佣时,分别记录 maker/taker、base/quote/DEEP 和当前 epoch 参数。

动手检查

  • DEEP staking 如何影响费用等级 中哪一步会读写 BalanceManager,哪一步会进入 Vault
  • 失败时应优先排查余额不足、cap/proof 权限、pool pause/version 还是治理参数未生效?
  • 应用侧需要向用户展示 wallet balance、manager balance、locked balance 中的哪几项?