合約解析
鑽石切面
本架構設計主要有 2 種 Facet,一種是共享通用的 Facet,其可以被多個項目共用,獨立的 storage;另一種則是產品業務邏輯專用,一般不會有 storage,因為 storage 直接放到 App 中了,且也不會被多個項目共享使用。
1. 共享通用Facet
- 特點:實現基礎功能,可被多個項目共用,擁有獨立的storage
- 位置:主要位於
/contracts/facets
目錄 - 範例:
DiamondLoupeFacet
、AccessControlFacet
、PausableFacet
等 - Storage設計:每個通用Facet通常有獨立的Storage庫,如
DiamondLoupeStorage
、DiamondCutStorage
,透過load()
函數取得儲存實例 - 繼承結構:通常繼承
Facet
基底類別和對應的Base類,如/contracts/facets/DiamondLoupe/Facet.sol
繼承Facet
和DiamondLoupeBase
- 功能:提供通用基礎設施功能,如鑽石切面管理、門禁控制、暫停機制等
2. 產品業務邏輯專用Facet
- 特點:實現特定業務邏輯,不共享給多個項目,通常不包含獨立storage(storage位於App中)
- 位置:主要位於
/contracts/apps
目錄下的各應用子目錄 - 範例:
MarketManagerFacet
、VaultFacet
、OrderMatcherFacet
等 - Storage設計:不定義獨立Storage,而是使用App級別的Storage,透過繼承業務Base類別存取共享存儲
- 繼承結構:通常繼承
Facet
基底類別、業務Base類別和通用Base類,如/contracts/apps/TuringMarket/MarketManager/Facet.sol
繼承Facet
、AccessControlBase
、MarketManagerBase
和TTOQManagerBase
- 功能:實現特定業務邏輯,如市場管理、資產Vault、訂單匹配等
核心差異總結
設計維度 | 共享通用Facet | 產品業務專用Facet |
---|---|---|
複用性 | 可跨項目共享 | 特定產品專用 |
Storage | 獨立Storage庫 | 使用App級Storage |
功能範圍 | 通用基礎架構 | 特定業務邏輯 |
目錄位置 | contracts/facets/ | contracts/apps/套用名稱/ |
繼承結構 | Facet + 通用Base | Facet + 業務Base + 通用Base |
這種設計模式既保證了通用功能的複用性和模組化,也確保了業務邏輯的獨立性和專用性,符合EIP-2535 Diamond模式的核心思想。