Skip to main content
一筆衍生品交易,是一個比成交那一刻活得更久的承諾。雙方談定價格,從那一刻起直到部位關閉,每一方都暴露在對方的償付能力之下。真正難辦的不是價格,而是這份曝險。 傳統市場的答案是一家機構:中央對手方(CCP)。清算所保留了這份職能,去掉了這家機構。它是站在每個買方與每個賣方之間的那個元件——而它是在區塊內部執行的協議程式碼,不是一家你必須先獲准加入的公司。

中央對手方是用來做什麼的

沒有它,曝險就是雙邊的。跟你交易的每一個人,都是一次你必須做、而且要一直做下去的信用判斷,而這樣的判斷會成倍增長:n 個參與者最多產生 n(n-1)/2 段關係,每一段都有自己的條款、自己的擔保品,以及自己對「你值多少」的判斷。違約不會停在它開始的地方,因為付不出錢給你的那一方,同時也在對另外四家違約。 中央對手方用一個中心取代這張網,靠的是一個叫合約更替的法律步驟:買方與賣方之間的原合約被解除,替換成兩份合約——買方面對清算所,清算所面對賣方。它成了每個賣方的買方,每個買方的賣方。
雙邊 — n(n-1)/2 條曝險
合約更替 — n 條曝險
參與方 A
參與方 C
參與方 B
參與方 D
參與方 A
參與方 C
參與方 B
參與方 D
清算所
每一方都是一次單獨的信用判斷,而違約不會停在它開始的地方。
中心方對每個賣方都是買方、對每個買方都是賣方:只需評估一個對手方、一套保證金規則、一個損失吸收順序。
由此有四個結果,它們合起來就是這家機構存在的全部理由。 只需面對一個對手方。 你評估的是一張資產負債表,不是其他所有人的,而且只評估一次。 淨額結算。 方向相反的部位相互抵銷,收斂成一個數。行情平靜時要繳的擔保品更少;不平靜時要平掉的部位也更少。 按公開規則收取的保證金。 中心方不可能在不收取的前提下承接所有人的風險,所以它事前收取原始保證金,並隨價格變動收取變動保證金——依據的是參與者可以提前讀到、並據此衡量自己的一套方法。 違約瀑布。 真的有人違約時,損失按事先約定的順序被吸收:先是違約方自己的保證金,然後是它對共擔基金的出資,然後是清算所自己的資本,最後是其他所有人的出資。這個順序就是那份承諾。正因為事前知道它,會員才能給「自己對中心方的曝險」定價。 這是市場在把其他路都試過一遍之後收斂出來的做法,而且它管用。這也是為什麼中央對手方是一家具系統重要性的機構,而不是一件基礎設施。

機構身分的代價

上面四項好處,每一項都附帶一個約束,而這些約束都來自同一件事:中央對手方是一家公司,不是一套機制。 加密世界迄今給出的兩個答案,都比它更差而不是更好。中心化交易所是一個同時還在經營這個市場、並保管著擔保品的中央對手方,既沒有那套監理,也沒有任何辦法核驗它聲稱持有的保證金。早期的鏈上場所則走向另一端,乾脆沒有清算所:雙邊資金池、外部 keeper,以及一次「等有人覺得發這筆交易划算了才發生」的強平。

同一份職能,不要那家機構

Intention 把中央對手方的職責清單拿過來,實作成核心執行的一個元件。 那張表裡有一行比其他幾行更重。在傳統市場裡,中央對手方和「保管誰持有什麼」的那家機構——中央證券保管機構——是被刻意分開的兩個法人。你不會希望承擔對手方風險的那一方,同時還是記錄誰擁有什麼的那本帳的保管人:一本私有帳簿加上一家機構,就沒有任何東西能制衡它。分立本身就是那道制衡。 清算所兩者兼任。它既是每一個部位的對手方,又是那份紀錄唯一的寫入方。這個合併在這裡是安全的,理由恰恰就是當初分立的理由:這本帳不是私有的。每一筆餘額、部位和保險基金變動都是公開狀態,並歸屬到引起它的那筆交易;瀑布在門檻處啟動,任何人都沒有裁量餘地;整條鏈條作為區塊的一個單元整體提交或整體中止。機構分立當初買到的那道制衡,在這裡由「帳本可讀」買到了。 以上沒有一句是在說協議在每一方面都比中央對手方更安全。中央對手方有資本、有監理者,背後還有一個世紀的違約處置經驗。它沒有的,是一份在違約正在發生時任何人都能讀到的帳本,以及一條不需要有人決定啟動就會自行運行的瀑布。這套設計買到的就是這兩樣,而它的買法,是把清算所做成區塊的一個函式,而不是這筆交易的一方。

唯一的寫入方

在協議內部,清算所是任何人的餘額、部位、保證金或未平倉合約量發生變化的唯一路徑。結算一筆成交要走它,強制平倉(強平)、自動減倉、資金費結算和保證金預留也一樣。 這種排他性正是設計本身。持有狀態的模組——帳戶、部位、訂單簿——存放資料,也提供修改資料的操作,但自己不發起任何事情。帳本只有一個地方會動,於是只有一個地方需要稽核、只有一個地方需要加裝觀測點;不變式在這一處強制執行就夠,不必指望每個呼叫方都記得。

公式與效果是分開的

決定多少的那些規則,實作為純函式、無狀態函式:保證金要求、強平價格、減倉對象選擇、手續費計算、未平倉合約量上限,以及槓桿級距。它們接受輸入值、回傳結果;不讀取任何帳本狀態,也不修改任何東西。 清算所呼叫這些函式,把結果落到狀態上。
風險公式 — 純函式,不寫狀態
清算所 — 唯一的寫入方
保證金
結算成交
強平
預留保證金
減倉對象選擇
強平
手續費
減倉
未平倉量上限
結算資金費
帳戶 · 部位 · 未平倉量狀態只有一個寫入方,重放不會分叉
數值
寫入
由此有兩個結果。一次保證金計算可以脫離環境、對著一張輸入與預期輸出的表單獨驗證,既不需要鏈,也不需要準備任何狀態。而且這些公式是逐位元精確的定點數運算,捨入規則固定在算術層,不由各呼叫點自行決定;因此兩個驗證者計算同一項要求,得到的是同一個整數,不是「在容差內相同的數」。
捨入是規範的一部分,不是實作細節。保證金在有利於系統安全的方向上無條件進位;手續費按對哪一方有利分別無條件捨去或進位。節點的捨入方式一旦不同,就不是「稍微算錯了一點」——它會產出另一份帳本,從而分叉。

保證金與預留

帳戶的可用額度不只是餘額。掛著的訂單會按可能開出的部位預留額度,這樣帳戶就不會把同一份擔保品同時許諾給兩筆訂單,等到兩筆都成交才發現衝突。 訂單下達、修改、撤銷和成交時,預留都由清算所持續維護;掛單底下的部位一變,預留就重新推導——所以一筆只減倉訂單掛在那裡,底下的部位後來縮小了,這筆訂單會重新評估,不會留著一個過時的值。 保證金是分級距的:要求隨部位規模在治理設定的邊界內遞增,因此大到難以平掉的部位,會按比例承擔更高的要求。交易側的說明參見保證金模式和槓桿。

違約瀑布

這就是上面講的那套中央對手方機制,只是把委員會拿掉了。核心在撮合之前按固定次序運行風險階段,讓被迫產生的流量先了結,自主流量才放行。 帳戶無法覆蓋自己的虧損時,缺口會沿著一條固定的承接序列往下傳:
風險階段,按固定次序,在撮合之前
1 · 金庫減倉
2 · 強制平倉
3 · 自動減倉
無法覆蓋自己虧損的帳戶
在訂單簿上平掉部位以破產價格為界
保險基金協議狀態,由強平罰金注入 — 不是多簽
自動減倉對手方部位依據一個任何人都能重算的確定性分數挑選
了結
仍有缺口
仍有缺口
強平是協議動作。帳戶的擔保品跌破維持要求時,網路自己在訂單簿上平掉這個部位,以破產價格為界。這裡沒有 keeper 交易、沒有 gas 競價,也沒有「誰先觸發」的競速——競速帶來的價值抽取因此消失,另一種失效模式也一併消失:恰恰在壅塞到必須強平的那幾分鐘裡,沒有人出現。 保險基金是協議裡對應共擔違約基金的那一層,而且它是協議狀態:由強平罰金注入,用於吸收破產缺口。它不是多簽,所以注資或支取,不必恰恰在人工簽章最難湊齊的那幾分鐘裡去湊人工簽章。 自動減倉是最後一層損失承擔,用於訂單簿和保險基金合起來也無法吸收一次破產的情形。它占據的是中央對手方用強制平倉和向存續會員追繳現金去填的那個位置——差別在於:對手方部位按破產價格平掉,挑選依據是一個由公開狀態算出的確定性分數。任何人都可以把這個結果重新算一遍;沒有人去挑。 門檻和完整算例參見強平與自動減倉。

資金費

資金費持續採樣,按計畫時點結算,對象是結算當下的部位;費率由標記價格相對指數價格的溢價推導出來,並箝制在協議設定的邊界之內。資金費是區塊執行內部清算所的一個階段,所以一次資金費支付就是一個協議操作,帶有與其他任何狀態變更相同的歸屬資訊,不是某個外部行程的週期性掃帳。 費率、結算間隔以及溢價如何計算,參見資金費率。

為什麼這該放在協議裡

另一種做法——清算是一組對撮合引擎作出反應的合約——會製造出一個窗口。成交和保證金檢查之間,會有一段狀態:帳戶保證金不足,而且外界看得到。觸發和 keeper 交易之間,也會有一段狀態:部位本該強平,卻還沒強平。 在這裡,整條鏈條——一筆成交引發保證金檢查,檢查觸發強平,強平動用保險基金,可能進一步觸發減倉,減倉又帶來新的保證金檢查——作為區塊中的一個單元整體提交或整體中止。不存在這樣的中間狀態:越界已經看得到,針對它的處置卻還沒啟動。 這正是中央對手方承諾、卻交付不了的那條性質——因為它的保證活在規則手冊裡,而它的帳本每天日終就關了。在這裡,保證就是執行本身。

後續閱讀

撮合

清算所要結算的那些成交,是從哪裡來的。

IntentionKernel

把被迫流量排在自主流量之前的那個階段次序。

強平

門檻、強平瀑布,以及交易者會看到什麼。

資金費率

費率、結算間隔與溢價計算。