合約解析

合約概述

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存儲

  • 訂單管理: 使用orderIsFilledOrCancelledMaporderRemainingMap追蹤訂單狀態
  • 市場配置: 包含maxSlippageBpsmaxFeeRateBps等全域參數
  • 資金管理: 透過marketVaultMapfeeVaultAmountMap管理市場和費用資金
  • 類型哈希: 預先定義多種EIP-712結構化資料的類型哈希,如訂單(Order)、支付(Payout)等

3.2 TokenUnlocker存儲

  • 金庫管理: 追蹤vaultsMapunlockedSchedulesMap實現代幣線性釋放
  • 質押系統: 管理userStakingAmountMapstakeSchedulesMap記錄質押資訊
  • 投票機制: 維護proposalsMapuserVotingPowerMap支援治理功能
  • 類型哈希: 定義多種操作的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能夠靈活應對不斷變化的業務需求,同時保持系統的安全性和可維護性,為去中心化應用提供了強大的基礎設施支援。