中央對手方是用來做什麼的
沒有它,曝險就是雙邊的。跟你交易的每一個人,都是一次你必須做、而且要一直做下去的信用判斷,而這樣的判斷會成倍增長: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
把被迫流量排在自主流量之前的那個階段次序。
強平
門檻、強平瀑布,以及交易者會看到什麼。
資金費率
費率、結算間隔與溢價計算。