合約解析
合約概述
1. 整體架構
TuringM-EIP2535採用 EIP-2535 Diamond模式 構建,這是一種高度模組化的智慧合約架構。此模式透過代理合約(Proxy)實現功能的動態組合與升級,克服了傳統智能合約部署後無法修改的限制,同時解決了單一合約程式碼大小限制的問題。
2. 核心元件
2.1 鑽石基礎架構
- Diamond.sol: 核心代理合約,繼承自OpenZeppelin的Proxy合約,實現了EIP-2535標準的鑽石模式。透過
_implementation()
函數動態路由函數呼叫到對應的切面(facet)。 - IDiamond.sol: 定義鑽石合約的核心接口,包括FacetCut結構(用於添加/替換/刪除切面)和相關錯誤定義。
- DiamondCutBase.sol: 實現鑽石切面的管理功能,支援添加、替換和移除切面,並維護選擇器(selector)到切面的映射關係。
- DiamondLoupeBase.sol: 提供鑽石結構的檢查功能,如獲取所有切面地址、查詢特定選擇器對應的切面等。
2.2 應用模組
- TuringMarketApp: 基於鑽石模式的交易市場應用,支援條件ERC1155 NFT與ERC20資產的原子交換。
- TokenUnlockerApp: 基於鑽石模式的代幣管理應用,提供投資/退款、質押/解質押和提案投票等功能。
3. 資料儲存設計
3.1 TuringMarket存儲
- 訂單管理: 使用
orderIsFilledOrCancelledMap
和orderRemainingMap
追蹤訂單狀態 - 市場配置: 包含
maxSlippageBps
、maxFeeRateBps
等全域參數 - 資金管理: 透過
marketVaultMap
和feeVaultAmountMap
管理市場和費用資金 - 類型哈希: 預先定義多種EIP-712結構化資料的類型哈希,如訂單(Order)、支付(Payout)等
3.2 TokenUnlocker存儲
- 金庫管理: 追蹤
vaultsMap
和unlockedSchedulesMap
實現代幣線性釋放 - 質押系統: 管理
userStakingAmountMap
和stakeSchedulesMap
記錄質押資訊 - 投票機制: 維護
proposalsMap
和userVotingPowerMap
支援治理功能 - 類型哈希: 定義多種操作的EIP-712類型哈希,如質押(Stake)、投票(Vote)等
4. 關鍵功能實現
4.1 鑽石切割管理
- 支援動態新增功能切面
- 允許替換現有切面實現
- 可移除不再需要的功能
- 所有變更透過
DiamondCut
事件記錄
4.2 市場交易功能
- 支持限價訂單和市價訂單
- 實現訂單匹配和原子交換
- 包含滑點控制和費用機制
- 支援訂單取消和結算
4.3 代幣解鎖機制
- 線性釋放計畫管理
- 投資退款功能
- 質押獎勵計算
- 社區治理投票
5. 技術亮點
- 模組化設計: 各功能獨立封裝在不同切面,方便開發與維護
- 可升級性: 透過DiamondCut功能實現無停機升級
- 安全性: 使用EIP-712結構化簽章確保交易安全
- 靈活性: 支援多種代幣類型和複雜的業務邏輯
- 可擴充性: 架構設計支援輕鬆新增功能模組
6. 技術堆疊
- Solidity 0.8.20
- OpenZeppelin合約庫
- EIP-2535 Diamond模式
- EIP-712結構化資料簽名
- ERC-1155和ERC-20代幣標準
此架構設計使TuringM-EIP2535能夠靈活應對不斷變化的業務需求,同時保持系統的安全性和可維護性,為去中心化應用提供了強大的基礎設施支援。