ch09-05 供应资产到 MarginPool
先看用户路径
这一节从 Margin 用户动作读起:围绕“供应资产到 MarginPool”,先把 manager、collateral、loan、trade 和 repay 的顺序排清楚,再看源码入口。
源码入口
重点阅读:
- scripts/transactions/supplyToMarginPool.ts
- packages/deepbook_margin/sources/margin_pool.move
- packages/deepbook_margin/sources/margin_pool/position_manager.move
- packages/deepbook_margin/sources/margin_pool/margin_state.move
源码旁白:先定位结构体、入口函数和事件,再回到本节的资金路径或应用流程。不要从 helper 函数开始读。
把 PTB 串起来
供应资产是成为借贷池 LP,不是给自己的 manager 加保证金。参考 scripts/transactions/supplyToMarginPool.ts:
client.deepbook.marginPool.supplyToMarginPool(
"USDC",
tx.object(supplierCapID[env]),
90_000,
)(tx);
链上 MarginPool.supply 会:
- 调
state.increase_supply更新利息。 - 增加供应者 supply shares。
- 更新 referral fee shares。
- 把 coin 加入 vault。
- 记录 rate limiter deposit。
- 检查
total_supply <= supply_cap。
供应页面需要展示:
- 用户 supply amount 和 supply shares。
- 池 total supply、total borrow、utilization、interest rate。
- supply cap 剩余额度。
- withdrawal rate limit 和当前可提。
- referral 收益,如果应用支持 referral。
工程旁白
supplyToMarginPool.ts 对应的是借贷池资金端。用户供应后拿到的是供应 position 和 shares,收益来自借款人利息;它不创建 MarginManager 债务,也不会让某个杠杆仓位更安全。
供应页面的风险提示应包含 utilization 和提款限制。高 utilization 可能带来更高 borrow APR 和 supply APR,但也意味着 vault 可提流动性更紧张,rate limit 可能让大额提款需要等待。
Margin 应用判断
- 供应入口使用
SupplierCap/position 语义,不依赖交易 manager。 - 可提金额用 shares 实时换算,并额外显示 rate limit 和 vault balance。
- 供应成功后刷新 lending position,而不是 margin trading position。
动手检查
- 供应资产后,用户获得的是 supply shares 还是抵押余额?
- 当前 pool 是否接近 max utilization,提款是否可能受限?
- APR 展示是否来自
ProtocolConfig.interest_rate和当前 utilization?