合約解析

鑽石切面

本架構設計主要有 2 種 Facet,一種是共享通用的 Facet,其可以被多個項目共用,獨立的 storage;另一種則是產品業務邏輯專用,一般不會有 storage,因為 storage 直接放到 App 中了,且也不會被多個項目共享使用。

1. 共享通用Facet

  • 特點:實現基礎功能,可被多個項目共用,擁有獨立的storage
  • 位置:主要位於/contracts/facets目錄
  • 範例DiamondLoupeFacetAccessControlFacetPausableFacet
  • Storage設計:每個通用Facet通常有獨立的Storage庫,如DiamondLoupeStorageDiamondCutStorage,透過load()函數取得儲存實例
  • 繼承結構:通常繼承Facet基底類別和對應的Base類,如/contracts/facets/DiamondLoupe/Facet.sol繼承FacetDiamondLoupeBase
  • 功能:提供通用基礎設施功能,如鑽石切面管理、門禁控制、暫停機制等

2. 產品業務邏輯專用Facet

  • 特點:實現特定業務邏輯,不共享給多個項目,通常不包含獨立storage(storage位於App中)
  • 位置:主要位於/contracts/apps目錄下的各應用子目錄
  • 範例MarketManagerFacetVaultFacetOrderMatcherFacet
  • Storage設計:不定義獨立Storage,而是使用App級別的Storage,透過繼承業務Base類別存取共享存儲
  • 繼承結構:通常繼承Facet基底類別、業務Base類別和通用Base類,如/contracts/apps/TuringMarket/MarketManager/Facet.sol繼承FacetAccessControlBaseMarketManagerBaseTTOQManagerBase
  • 功能:實現特定業務邏輯,如市場管理、資產Vault、訂單匹配等

核心差異總結

設計維度共享通用Facet產品業務專用Facet
複用性可跨項目共享特定產品專用
Storage獨立Storage庫使用App級Storage
功能範圍通用基礎架構特定業務邏輯
目錄位置contracts/facets/contracts/apps/套用名稱/
繼承結構Facet + 通用BaseFacet + 業務Base + 通用Base

這種設計模式既保證了通用功能的複用性和模組化,也確保了業務邏輯的獨立性和專用性,符合EIP-2535 Diamond模式的核心思想。