前言:EVC 生態系的第一座大樓
在上一篇介紹 Euler V2 的文章中,我們花了很大的篇幅討論 EVC (Ethereum Vault Connector) 這個底層架構。當時我的結論是:EVC 是一個通用的金融地基,它定義了標準的帳戶檢查流程,但真正的樂趣在於——到底誰會在上面蓋房子?又能蓋出多複雜的房子?
今天這篇文章,就是要來介紹 EVC 生態系中一棟有趣的建築:Twyne。
Twyne 是一個建立在 Euler 之上的協議,表面上它看起來像是一個讓你能用更高 LTV (Loan-to-Value) 借錢的平台,但從工程與合約設計的角度來看,它本質上是一個 Credit Delegation (信用委託) 市場,將 Euler 市場中原本閒置的「借貸能力 (Borrowing Power)」再透過一個借貸市場最大化效率。
在這篇文章中,我們來看 Twyne 如何利用 Euler 的積木堆疊出這套系統,並重點探討其核心合約的設計哲學:它是如何作為一個「中間件 (Middleware)」,創造出了第二層的風險管理邏輯。
Twyne 的本質:信用二房東
在 Euler 這種 monolithic lending 的借貸市場中,由於所有人存進去的錢都可以被當作抵押品,再拿來借款,造成他們必定存在一個效率閒置問題:
**大部分存錢進來 Euler 的存戶,**是單純的「借出者」:他們存入了資產 (e.g., WETH),只是為了賺取利息,通常不會把此資產作為抵押品去借錢。因此這群不借錢的人,他們的 borrowing power 被閒置。
同時,這類型的市場,由於有所有資產互相曝險的問題,市場的管理者往往為了全域安全而設定較為保守的清算線,例如使用 WETH 借出 USDC 的 LTV 為 90%,這使得資金效率不夠高、或 borrower 容易被清算。
左邊的 Bob 則是 borrower, 存入 WETH 是為了借出 USDC 右邊的 Alice 是單純的 supplier,存入 WETH,借貸額度閒置
上圖的 Alice 與 Bob 兩個角色之間,就存在一個潛在的市場:若是 Alice 把它閒置的「借款額度」再借給 Bob,就能夠賺取更多的收益,Bob 也能更大化他的資金利用率,這可能可以用來開更高的槓桿,或是避免被清算。
Twyne 就是這樣的協議:它使用了 Euler 既有的 EVault 合約,再開一個市場給上圖中的 eWETH (用戶存入 WETH 之後拿到的 share token),也可以想像成一個存戶的 borrowing power。
簡單來說,Twyne 在原本的 Euler LTV 之上,用「租來的信用」填補了額外的空間。這聽起來很直觀,但在工程實作上,Twyne 做出了一個非典型的架構選擇——它並不是直接住在 Euler 的 EVC 裡,而是自己蓋了一個 EVC。
系統架構:雙 EVC 的 "Sidecar" 設計
如果我們仔細閱讀 CollateralVault 的程式碼,會發現一個有趣的現象:它同時與兩個 EVC 互動。
這揭示了 Twyne 的真實架構:它不是 Euler 生態系內的一個原生 Controller,而是一個 平行宇宙。
1. Twyne EVC (The Internal World)
Twyne 部署了一套自己的 EVC,用來管理它內部的借貸關係。
在這個世界裡:
- Collateral Vault 是「借款人」。
- Intermediate Vault (Credit Vault) 是「放款人」。
- 交易標的:Euler 的
eToken(例如 eUSDC)。 - Intermediate Vault 其實是一個「套娃 Vault」:它是一個 EVault,但它的底層資產 (Asset) 不是 USDC,而是 Euler 的 eUSDC。這就是所謂的「將借貸能力代幣化」。
2. Euler EVC (The External World)
這是原本的 Euler 世界。
在這個世界裡:
- Collateral Vault 扮演一個普通的「使用者 (User)」。
為什麼要搞這麼複雜(雙 EVC)?
這是一個非常聰明的 Workaround,主要是為了解決 EVC 「一個帳戶只能有一個 Controller」 的限制。
如果 Twyne 試圖直接在 Euler 的 EVC 內運作,CollateralVault 就必須同時接受兩個老大的指揮:
- Euler Market:因為要借錢,Euler 必須是 Controller。
- Twyne Credit Vault:因為要租用信用,Twyne 也必須是 Controller (才能清算你)。
EVC 不允許雙 Controller。因此 Twyne 的解法是:把 **CollateralVault** 變成一個獨立的 EVC 系統。在 Twyne 的 EVC 裡,Twyne 是老大 (Controller);而這個 Vault 再以「普通用戶」的身份去跟 Euler EVC 打交道。
這證實了 Twyne 並非原生的 "Built on Euler" 擴充,而是一個掛在 Euler 旁邊的 Sidecar (掛車) 協議,利用 EVC 的標準化接口來實現乾淨的邏輯分離。
核心機制:Reserve 與影子抵押品
了解了雙 EVC 架構後,我們就能看懂 CollateralVault 中最核心的 _handleExcessCredit 函數在做什麼。它其實是在兩個世界之間進行資產搬運。
當用戶想要維持 95% 的 LTV 時:
計算需求:合約計算為了滿足 Euler (External) 的安全要求,帳面上需要多少總資產。
內部借貸 (Internal Borrow):
如果資產不足,CollateralVault 會向 IntermediateVault 呼叫 borrow。發生地點:Twyne EVC。發生與否:IntermediateVault 將 eToken (e.g., eETH) 轉移給 CollateralVault。
外部呈現 (External View):
現在 CollateralVault 持有「用戶本金 (ETH)」+「借來的信用 (eETH)」。CollateralVault 在 Euler EVC 裡呼叫 checkAccountStatus。Euler 看到這個帳戶滿手資產 (ETH + eETH),判定安全,允許借款。
這就是 Twyne 的魔法:在內部借來 eToken,在外部充當抵押品。
- 計算需求:合約計算為了滿足 Euler (External) 的安全要求,帳面上需要多少總資產。
- 內部借貸 (Internal Borrow):
- 如果資產不足,
CollateralVault會向IntermediateVault呼叫borrow。 - 發生地點:Twyne EVC。
- 動作內容:
IntermediateVault將eToken(e.g., eETH) 轉移給CollateralVault。
- 外部呈現 (External View):
- 現在
CollateralVault持有「用戶本金 (ETH)」+「借來的信用 (eETH)」。 CollateralVault在 Euler EVC 裡呼叫checkAccountStatus。- Euler 看到這個帳戶滿手資產 (ETH + eETH),判定安全,允許借款。
這就是 Twyne 的魔法:在內部借來 eToken,在外部充當抵押品。 這種設計讓 Euler 看到的是一個「超額抵押」的健康帳戶,但實際上,那份超額的部分是從另一個存戶那裡「租」來的。
工程實作:EVC 操作員與原子化 Batching
要驅動這套複雜的雙 EVC 系統,Twyne 大量依賴了 EVC 的 Operator (操作員) 機制。
在正常的 DeFi 流程中,用戶需要多次授權。但在 Twyne 中,為了實現「一鍵開倉」,系統利用了 EVC.exec():
- 授權代理:用戶將
CollateralVault設為自己在 Euler EVC 和 Twyne EVC 中的 Operator。 - 原子操作:在一個
exec呼叫中,CollateralVault會同時完成:
- 從用戶手中轉入抵押品。
- 到 Twyne EVC 租用信用 (borrow eToken)。
- 到 Euler EVC 執行借款。
- 檢查兩邊的
accountStatus是否都符合安全條件。
這種設計避免了中間狀態導致的清算風險,也確保了「租用信用」與「實際借款」這兩個動作是強耦合的,不存在租了錢卻沒借款的空轉期。
雙層清算的實作:Inheritance (繼承)
既然有了雙層架構,自然就有雙層清算。
Twyne 清算 (The Soft Landing)
這是發生在 Twyne EVC 內部的清算。
當用戶觸發了 Twyne 設定的 LTV (例如 95%),Liquidator 呼叫 liquidate()。
這裡 Twyne 採用了 Liquidation by Inheritance (繼承式清算)。
因為 CollateralVault 是一個獨立合約,Liquidator 不需要賣掉資產,只需要把這個 Vault 的 borrower (Owner) 變量改成自己。
- 操作:
borrower = liquidator - 結果:Liquidator 繼承了整個 Vault 的所有權,包含裡面的 ETH (本金)、eETH (借來的信用) 以及對 Euler 的債務。他必須負責把倉位修復到健康狀態。
Euler 清算 (The Hard Landing & Fallback)
這是發生在 Euler EVC 的清算。
如果 Twyne 的清算人沒來得及反應,市場暴跌觸及了 Euler 的 LTV (例如 90%),Euler 的清算機制就會無情啟動。
這時候,Euler 不管你是什麼 Twyne Vault,它只看到一個「抵押品不足的帳戶」,於是直接拍賣 Vault 裡的 ETH 和 eETH。
災後重建:Post-Mortem Accounting
當 Euler 強制清算發生後,CollateralVault 裡會剩下一堆爛攤子(資產被拿去抵債了,可能還欠 Twyne 內部的錢)。這時候需要呼叫 handleExternalLiquidation 來進行災後分帳。
這部分的程式碼邏輯非常精彩,展示了如何在兩個協議之間做清算結算:
- Snapshot:檢查 Euler 清算後還剩多少資產。
- 償還順序 (The Waterfall):
- Priority 1: 如果 Euler 沒清乾淨,優先用 Liquidator 的錢還清 Euler 的債 (確保外部債務歸零)。Priority 2: 償還 Intermediate Vault。這是關鍵。剩餘資產優先用來償還 Twyne 內部的信用債務 (
intermediateVault.repay)。Priority 3: 如果還有剩,才還給 Borrower。 - 壞帳處理:如果資產不夠還給
IntermediateVault怎麼辦?Twyne 必須在同一個 Batch 裡呼叫intermediateVault.liquidate,正式認列壞帳。這也是 Credit LP 唯一會虧錢的時刻。
總結
風險矩陣:槓桿的代價與局限性
雖然 Twyne 極大地提升了資金效率,但作為「信用二房東」,它也引入了多層次的風險:
1. 遞迴清算風險 (Recursive Liquidation)
由於 Twyne 借出的抵押品本身就是 Euler 的 eToken,當 Euler 市場發生大幅波動時,eToken 的價值(包含累積利息)與標的資產的掛鉤雖然穩定,但在極端流動性危機下,如果 Euler 發生大規模壞帳,eToken 的兌換率可能受損。這會直接傳導至 Twyne,引發內外部雙重清算的連鎖反應。
2. Oracle 依賴性
Twyne 需要同時信任兩套 Oracle 邏輯:一套是 Euler 用來判斷 Vault 是否健康的外部 Oracle,另一套是 Twyne 用來判斷租用信用是否安全的內部評估邏輯。如果兩者出現報價延遲或偏差,可能導致用戶在 Twyne 看來安全,卻被 Euler 提前清算。
3. Intermediate Vault 的流動性枯竭
如果大量的借款人同時歸還信用,或者 IntermediateVault 的存戶(信用提供者)大規模撤資,可能會導致利息飆升,進而壓縮借款人的套利空間,甚至被迫平倉。
總結:EVC 樂高的終極型態
Twyne 給了我們一個關於 EVC 架構極佳的工程啟示。
它證明了 EVC 不僅僅是一個協議內的標準,更是一個可以用來構建 Layer 2 DeFi 的 SDK。Twyne 透過「自己部署 EVC」來管理內部邏輯,再透過「合約錢包」與 Euler EVC 互動。
這種 "Sidecar EVC" 的設計模式,雖然使得它不是原生的 Euler 擴充,但也帶來了極大的靈活性:它能夠在不干擾 Euler 底層安全性的前提下,乾淨地隔離出自己的風險市場 (Credit Market)。對於想要在 Euler 之上構建複雜衍生品的開發者來說,Twyne 的 CollateralVault 雙 EVC 設計絕對是教科書等級的範例。
這種 "Sidecar EVC" 的設計模式,雖然使得它不是原生的 Euler 擴充,但也帶來了極大的靈活性:它能夠在不干擾 Euler 底層安全性的前提下,乾淨地隔離出自己的風險市場 (Credit Market)。
對於 DeFi 生態系而言,Twyne 的出現標誌著借貸市場從「資產租賃 (Asset Rental)」走向了「信用代幣化 (Credit Tokenization)」的新階段。開發者不再需要重建整個借貸引擎,只需要利用 EVC 作為連接器,就能在現有的流動性之巔,蓋出更複雜、更高效的金融摩天大樓。Twyne 的 CollateralVault 雙 EVC 設計,無疑是這場架構革命中,最值得深入研讀的教科書範例。