ch07-10 与 Margin 借贷的差异
先看交易边界
这里先把问题放进同一笔交易里。“与 Margin 借贷的差异”成立的前提是借出、使用、归还都在同一笔交易里完成;任何跨交易债务想象都应该立刻排除。
源码入口
- packages/deepbook/sources/pool.move:DeepBookV3 闪电贷唯一 Spot pool 入口,包含
borrow_flashloan_base、borrow_flashloan_quote、return_flashloan_base、return_flashloan_quote。 - packages/deepbook/sources/vault/vault.move:底层
FlashLoanhot potato、FlashLoanBorrowed事件、pool/asset/amount 校验和 Vault 余额 split/join。 book/ch07/code/s01-flashloan-move-wrapper、s02-flashloan-ptb、s03-flashloan-event-query、s04-flashloan-indexer-row:本节对应的 wrapper、PTB、事件和表查询示例。
在一笔交易里走完
DeepBookV3 闪电贷:
- 入口在
packages/deepbook/sources/pool.move。 - 资金来自 Spot pool 的
Vault。 - 借出和归还必须在同一 PTB。
FlashLoanhot potato 强制归还。- 没有利率、抵押物、健康因子、清算和跨交易债务。
DeepBook Margin 普通借贷:
- 源码在
packages/deepbook_margin。 - 有账户、抵押、借款、还款、清算等长期状态。
- 债务可以跨交易存在。
写文档、代码和事件解析时必须使用 DeepBookV3 的 FlashLoanBorrowed,不要引用 Margin 的 borrow/repay 事件替代。
安全边界:本章的闪电贷只指 DeepBookV3 Spot pool 闪电贷,入口在 pool.move,底层在 vault.move。不要把它和
packages/deepbook_margin的普通借贷混淆;这里没有跨交易债务账户,也没有隔夜未还状态。
hot potato 的安全性来自 Move 资源必须被消费的类型约束。开发 wrapper 时不要试图把 FlashLoan 存进对象或跨交易传递,正确做法是在同一个 PTB 中 borrow、使用资产、return。
组合交易提醒
- 借 base 必须用
return_flashloan_base归还 base;借 quote 必须用return_flashloan_quote归还 quote。 FlashLoan不能跨交易保存,PTB 中必须让 borrow 返回值最终被 return 消费。- 事件查询只把
FlashLoanBorrowed当作成功交易的借出记录,不能推导出 Margin 债务状态。
动手检查
- 与 Margin 借贷的差异 的
pool.move入口是哪一个,底层vault.move校验哪几个字段? - 如果 PTB abort,是 pool id、资产方向、归还数量、hot potato 未消费,还是中间组合步骤失败?
- 这段逻辑是否仍明确区别 DeepBookV3 闪电贷和
deepbook_margin普通借贷?