深入原理
偿付能力与队列
LP 可能暂时资不抵债。先进先出的赔付队列和一个暂存资金的专用桶,确保盈利方按顺序得到支付,同时从不阻碍新的交易。
模型
Exchange 把 LP 的账目分成几个分区:
- 池中现金:Exchange 持有的 USDC 中不欠任何其他人的部分。从它持有的全部 USDC 中减去每个账户的可用余额、未平仓仓位中锁定的保证金和已计提的手续费,剩下的就是池中现金。它不会为负。尚未领取的构建者费作为 LP 的负债留在池中现金里:记账资金池已经把它们算作已支付,构建者领取时从池中现金支付,无法支付时进入队列。
- 专用桶:有待付款排队期间流入的亏损资金,在池中现金内单独划出,专门留给队列。结算时最先从这里支出。
- 赔付队列:未付盈利的先进先出列表,每一项是一个账户和一笔金额。
- 持仓中的债务:以排队待付款作为保证金的未平仓仓位的保证金。
协议不依靠预先注资、随时按需支付盈利的 LP,而是在现金不足时让盈利方排队,等之后的亏损补充 LP 时再支付。代币铸造速率所跟随的数值,即记账资金池,通过一个恒等式与这些分区联系起来,每一项操作都保持它成立:
tracked LP = LP cash − queued claims − debt in positions
它可以为负,这正是队列要应对的「暂时资不抵债」状态。
进入队列的只有 LP 在平仓时欠下、但当时付不出的部分:对于保证金来自余额的仓位,是扣除盈利手续费后的收益;对于保证金来自队列的仓位,是剩余的待付款。以下三项不进入队列:
- 你的保证金:对于保证金来自余额的仓位,保证金会立即回到你的可用余额,你可以提现或再次使用。
- 手续费不优先于排队的盈利方:每个盈利方都要支付盈利手续费,但只有队列为空、且池中现金也足以覆盖它时,手续费才会分给质押者和团队;否则留在 LP 中。只要有任何待付款在排队,就免收亏损和爆仓手续费。构建者费随盈利或亏损手续费一同扣出,遵循同样的规则。
- 有待付款排队期间的亏损:它们被划入专用桶,而不是成为可自由支配的池中现金。它们入账时仍会让记账资金池全额上升。
盈利平仓
无论 LP 处于什么状态,都先从收益中扣除 2% 的盈利手续费。然后:
- 队列为空:从池中现金向你支付,最多为全部收益。只有池中现金同时也足以覆盖手续费时,手续费才分给质押者和团队;否则留在 LP 中。
- 池中现金付不了的部分,或者在已有待付款排队时的全部收益,以你的名义追加到队尾。排队的部分不改变池中现金。
保证金来自排队待付款的仓位按同样方式结清,只是 LP 欠的是它剩余的全部待付款:盈利时是保证金加收益,亏损平仓时是保证金减亏损。开仓时动用的待付款只是抵押,并不是你持有的钱。
亏损平仓与爆仓
保证金来自余额的仓位亏损平仓或被爆仓时:
- 队列为空:亏损减去手续费(平仓为 2%,爆仓为保证金的 2%)成为池中现金。
- 有待付款排队:这笔资金留在 Exchange 中,但进入留给排队盈利方的专用桶,且不收手续费。它入账时仍计入记账资金池,也仍会为它铸造 TOKEN。
保证金来自排队待付款的仓位亏损时,不会带来任何现金:被注销的那部分待付款只是不再欠付,因此既不进入池中现金,也不进入专用桶。亏损平仓时,剩余的待付款像盈利一样支付或排队;只有队列为空、且池中现金足以覆盖待付款加手续费时,才收取亏损手续费。爆仓会注销全部待付款,不收手续费。
结算(harvest)
结算从队首开始支付排队的待付款:
- 从队首开始沿队列向后,用队列可用的现金逐笔支付;最后轮到的一笔可能只付一部分。
- 已支付的金额先从专用桶中扣除。如果现金在队列清空之前用完,就停止;之后的亏损为之后的结算提供资金。
- 队列清空时如果专用桶中还有剩余,就把余下部分释放为普通的池中现金。结算和释放都不改变记账资金池:排队的待付款早已从中扣除。
结算无需许可,调用者也得不到报酬。一次调用最多支付 64 笔待付款;只要有现金可付,我们的维护程序就以每次 32 笔调用它,所以无需任何人操心。
如果你又有一笔盈利要排队时,队列中最新的一笔待付款恰好也是你的,两笔会合并为一笔;支付顺序不变。用排队待付款开仓时,系统先消耗你最新的待付款,最多回溯 50 笔;以这种方式清空的待付款会在队列中留下空位,结算时会跳过。
不变式
- 池中现金和专用桶都是无符号数,因此都不会为负。
- 只要有任何待付款在排队,可用于新支付的现金就为零,因此新的盈利方永远不会先于更早的盈利方得到支付。
- 记账资金池等于池中现金减去排队待付款,再减去持仓中的债务。它可以为负:这是设计上允许的暂时资不抵债。
- 一次质押者分配会取走质押者的手续费(这部分始终有资金保障),以及 LP 超过 $10,000,000 的价值;没有待付款排队时,这部分超额从池中现金支付,否则以质押合约的名义排队。
索引服务在每个区块后检查这些恒等式,一旦有任何一项不成立就停止提供数据。
用户看到的内容
开仓不受队列影响,只受通常的未平仓量上限,以及单次开仓可动用的待付款笔数限制。盈利平仓要么立即向你支付,要么让你排队,取决于 LP 的状况。应用会显示可用余额(已支付)和排队余额(等待结算);两者都可以用来开新仓,因为排队的待付款可以充当保证金。