Arquitectura de Facetas
3. Arquitectura de Facetas (Agrupadas por Responsabilidad)
Las facetas se dividen en dos grupos principales:
- Facetas base: el núcleo del Diamond.
- Facetas de funciones: funciones de índice e integración.
3.1 Facetas base (Núcleo)
Estas residen en:
src/garden/facets/baseFacets/
Existen para mantener los intereses que no son de lógica de negocio modulares y actualizables.
Faceta de Propiedad (Ownership Facet)
Componentes clave:
OwnershipFacet.sol- Contrato de faceta principal que implementa la interfaz de propiedad ERC-173.OwnershipBase.sol- Contrato base que contiene la lógica central de propiedad.OwnershipStorage.sol- Diseño de almacenamiento para el estado de propiedad.
Qué controla:
- Quién es el dueño del Jardín (el contrato Diamond).
- Quién está autorizado para realizar cortes de diamante y cambiar la configuración del protocolo.
- Funcionalidad de transferencia de propietario: El propietario actual puede transferir la propiedad a una nueva dirección o renunciar a ella.
Faceta de Corte (Cut Facet / Upgrade Facet)
Componentes clave:
IDiamondCut.sol- Interfaz que define la función diamondCut.DiamondCutFacet.sol- Contrato de faceta principal.DiamondCutBase.sol- Lógica central del corte de diamante.DiamondCutStorage.sol- Diseño de almacenamiento para mapeos de facetas.
Qué controla:
- Qué facetas están registradas en el Diamond.
- Qué selectores de funciones expone cada faceta.
- Cómo se autorizan y ejecutan las actualizaciones.
Faceta de Actualización (Upgrade Facet)
Componentes clave:
IUpgrade.sol- Interfaz para operaciones de actualización de alto nivel.UpgradeFacet.sol- Contrato de faceta principal.UpgradeBase.sol- Lógica central de actualización.UpgradeStorage.sol- Seguimiento de versiones.
Qué controla:
- Sincronización con el FacetRegistry externo para obtener las actualizaciones aprobadas.
- Seguimiento de versiones para asegurar que los Diamonds estén actualizados.
- Verificación de hash para la integridad de los datos de actualización.
Faceta de Introspección (Loupe Facet)
Componentes clave:
IDiamondLoupe.sol- Interfaz para introspección.DiamondLoupeFacet.sol- Implementación.DiamondLoupeBase.sol- Lógica central.DiamondLoupeStorage.sol- Interfaces compatibles (ERC-165).
Qué controla:
- Reflexión / introspección:
- Qué facetas existen y qué selectores de funciones implementan.
- Qué interfaces admite el Diamond.
3.2 Facetas de Funciones / Dominio
Estas implementan el comportamiento a nivel de protocolo que realmente interesa a los usuarios.
Facetas de Índice (Función de Índice)
Componentes clave:
IIndex.sol,IndexFacet.sol,IndexBase.sol,IndexStorage.sol
Qué problema resuelven:
- Proporcionan capacidades relacionadas con el índice directamente en el Jardín:
connectToIndex(address indexAddress)disconnectFromIndex()rebalance()isConnectedToIndex()
Facetas de Utilidad / Integración de Protocolos (Integraciones DeFi)
Componentes clave:
- Uniswap V3:
UniswapV3Base.sol,IUniswapV3.sol - Camelot V3:
CamelotV3Base.sol,ICamelotV3.sol - GMX V2:
GmxV2Base.sol,IGmxV2.sol,GmxV2Storage.sol - Aave V3:
AaveV3Base.sol,IAaveV3.sol - Pendle V2:
PendleV2Base.sol,IPendleV2.sol
Qué problema resuelven:
- Convierten operaciones abstractas como el reequilibrio en intercambios concretos o gestión de posiciones.
- Proporcionan adaptadores reutilizables alrededor de protocolos externos.