ch09-07 通过 DeepBook Pool 执行杠杆买入
先看用户路径
这一节从 Margin 用户动作读起:围绕“通过 DeepBook Pool 执行杠杆买入”,先把 manager、collateral、loan、trade 和 repay 的顺序排清楚,再看源码入口。
源码入口
重点阅读:
- packages/deepbook_margin/sources/pool_proxy.move
- packages/deepbook_margin/sources/margin_manager.move
- packages/deepbook_margin/sources/helper/oracle.move
book/ch09/code/s03-borrow-and-trade/README.md
源码旁白:先定位结构体、入口函数和事件,再回到本节的资金路径或应用流程。不要从 helper 函数开始读。
把 PTB 串起来
杠杆买入常见路径:
- 用户有 quote 抵押,如 USDC。
- 调
borrow_quote借入更多 USDC。 - 调
pool_proxy.place_market_order或place_limit_order买入 base。 - 调
pool_proxy.withdraw_settled_amounts结算成交资产。 - 重新读取
manager_state和风险率。
pool_proxy.place_market_order 会先根据订单簿计算 effective price,再调用 registry.assert_price。如果订单簿没有足够流动性,会触发 ENoLiquidityInOrderbook 或 DeepBook Pool 侧错误。
交易前模拟要输出三类信息:
- 预估成交均价和滑点。
- 借款后风险率和成交后风险率。
- 价格保护失败、流动性不足、风险率不足时的用户提示。
工程旁白
杠杆买入的债务通常是 quote。base 价格下跌会降低资产价值并压低风险率;quote 利息增长也会逐步抬高 debt amount。因此交易确认页要同时显示价格风险和借款成本。
市价买入最容易在订单簿深度不足时产生失败或过大滑点。pool_proxy 会做 effective price 与 oracle 检查,应用侧也应在提交前用订单簿快照给出最坏可接受价格。
Margin 应用判断
- 买入 PTB 包含 borrow quote、place order、settle/refresh 三个逻辑步骤。
- 所有价格和滑点提示都要标明基于当前订单簿,最终以 dry run 为准。
- 成交后如果没有立即还款,继续展示 quote debt 的利息累计。
动手检查
- 买入后 debt asset 是否仍是 quote,base 下跌对风险率有什么影响?
- 订单失败是 risk ratio 不足、oracle price out of bounds 还是 orderbook liquidity 不足?
- 交易完成后是否刷新 settled amounts 和 open orders?