中央对手方是用来做什么的
没有它,敞口就是双边的。跟你交易的每一个人,都是一次你必须做、而且要一直做下去的信用判断,而这样的判断会成倍增长:n 个参与者最多产生 n(n-1)/2 段关系,每一段都有自己的条款、自己的抵押品,以及自己对”你值多少”的判断。违约不会停在它开始的地方,因为付不出钱给你的那一方,同时也在对另外四家违约。
中央对手方用一个中心取代这张网,靠的是一个叫合约更替的法律步骤:买方与卖方之间的原合约被解除,替换成两份合约——买方面对清算所,清算所面对卖方。它成了每个卖方的买方,每个买方的卖方。
双边 — n(n-1)/2 条敞口
合约更替 — n 条敞口
参与方 A
参与方 C
参与方 B
参与方 D
参与方 A
参与方 C
参与方 B
参与方 D
清算所
每一方都是一次单独的信用判断,而违约不会停在它开始的地方。
中心方对每个卖方都是买方、对每个买方都是卖方:只需评估一个对手方、一套保证金规则、一个损失吸收顺序。
机构身份的代价
上面四项好处,每一项都附带一个约束,而这些约束都来自同一件事:中央对手方是一家公司,不是一套机制。
加密世界迄今给出的两个答案,都比它更差而不是更好。中心化交易所是一个同时还在经营这个市场、并保管着抵押品的中央对手方,既没有那套监管,也没有任何办法核验它声称持有的保证金。早期的链上场所则走向另一端,干脆没有清算所:双边资金池、外部 keeper,以及一次”等有人觉得发这笔交易划算了才发生”的强平。
同一份职能,不要那家机构
Intention 把中央对手方的职责清单拿过来,实现成内核执行的一个组件。
那张表里有一行比其他几行更重。在传统市场里,中央对手方和「保管谁持有什么」的那家机构——中央证券存管机构——是被刻意分开的两个法人。你不会希望承担对手方风险的那一方,同时还是记录谁拥有什么的那本账的保管人:一本私有账簿加上一家机构,就没有任何东西能制衡它。分立本身就是那道制衡。
清算所两者兼任。它既是每一个仓位的对手方,又是那份记录唯一的写入方。这个合并在这里是安全的,理由恰恰就是当初分立的理由:这本账不是私有的。每一笔余额、仓位和保险基金变动都是公开状态,并归属到引起它的那笔交易;瀑布在阈值处启动,任何人都没有裁量余地;整条链条作为区块的一个单元整体提交或整体中止。机构分立当初买到的那道制衡,在这里由「账本可读」买到了。
以上没有一句是在说协议在每一方面都比中央对手方更安全。中央对手方有资本、有监管者,背后还有一个世纪的违约处置经验。它没有的,是一份在违约正在发生时任何人都能读到的账本,以及一条不需要有人决定启动就会自行运行的瀑布。这套设计买到的就是这两样,而它的买法,是把清算所做成区块的一个函数,而不是这笔交易的一方。
唯一的写入方
在协议内部,清算所是任何人的余额、仓位、保证金或未平仓合约量发生变化的唯一路径。结算一笔成交要走它,强制平仓(强平)、自动减仓、资金费结算和保证金预留也都要走它。 这种排他性正是设计本身。持有状态的模块——账户、仓位、订单簿——只管存放数据、暴露修改数据的操作,自己不发起任何事情。账本只有一个地方会动:审计只看这一处,埋点只在这一处,不变式也在这一处强制执行,不必指望每个调用方都记得。公式与效果是分开的
决定多少的那些规则,实现为纯的、无状态的函数:保证金要求、强平价格、减仓对象选择、手续费计算、未平仓合约量上限,以及杠杆档位。它们接受值、返回值;不读取任何账本状态,也不修改任何东西。 清算所调用它们,并把结果落到状态上。风险公式 — 纯函数,不写状态
清算所 — 唯一的写入方
保证金
结算成交
强制平仓
冻结保证金
减仓对手选择
执行强平
手续费
执行减仓
未平仓合约量上限
结算资金费
账户 · 仓位 · 未平仓合约量状态只有一个写入方,重放不会分叉
数值
写入
保证金与预留
账户的可用额度不等于它的余额。挂着的订单会按可能开出的仓位先预留一份,这样账户就不会把同一份保证金资产同时许给两笔订单,等两笔都成交了才发现撞车。 下单、改单、撤单、成交,每一步清算所都在维护预留。挂单底下的仓位一变,预留就重新推导一次。所以:仓位后来缩小了,挂在它上面的只减仓订单会被重新评估,不会留着一个过时的值。 保证金是分档的:要求随仓位规模在治理设定的边界内递增,因此大到难以平掉的仓位,会按比例承担更高的要求。交易侧的说明见保证金模式和杠杆。违约瀑布
这就是上面讲的那套中央对手方机制,只是把委员会拿掉了。内核在撮合之前按固定次序跑风险阶段:被迫产生的流量先了结,自主流量才放行。 当一个账户无法覆盖自己的亏损时,缺口沿着一条固定的承接序列向下传递:撮合之前,按固定次序运行的风险阶段
1 · 金库减仓
2 · 强制平仓
3 · 自动减仓
无法覆盖自己亏损的账户
在订单簿上平掉仓位以破产价格为界
保险基金协议状态,由强平罚金注入——不是多签
自动减仓对手方仓位由任何人都能重算的确定性分数选出
了结
仍有缺口
仍有缺口
资金费
资金费持续采样,按计划时点对结算时刻的仓位结算;费率由标记价格相对指数价格的溢价推导,并钳制在协议设定的边界之内。它作为清算所的一个阶段在区块执行内部运行,所以一次资金费支付就是协议操作,带的归属信息和其他任何状态变更一样——不是某个外部进程的周期性扫账。 费率、结算间隔以及溢价如何计算,见资金费率。为什么这该放在协议里
另一种做法——把清算做成一组对撮合引擎作出反应的合约——会开出一个窗口。成交与保证金检查之间,存在一段账户保证金不足、而且外界看得见的状态。触发与 keeper 交易之间,存在一段仓位本该强平却还没强平的状态。 在这里,整条链条——一笔成交引发保证金检查,检查触发强平,强平动用保险基金,可能进一步触发减仓,减仓又带来新的保证金检查——在区块里作为一个单元整体提交,或者整体中止。不存在这样的中间状态:越界已经看得见,处置却还没开始。 这正是中央对手方承诺、却交付不了的那条性质——因为它的保证活在规则手册里,而它的账本每天日终就关了。在这里,保证就是执行本身。后续阅读
撮合
清算所结算的那些成交是从哪里来的。
IntentionKernel
把被迫流量排在自主流量之前的那个阶段次序。
强平
阈值、强平瀑布,以及交易者会看到什么。
资金费率
费率、结算间隔与溢价计算。