Loupe
Le module Loupe est entièrement en lecture seule.
Le module Loupe est entièrement en lecture seule. Il fournit les fonctions d'introspection requises par l'EIP-2535, permettant aux explorateurs de blocs, frontends et bots d'indexation de « voir » à l'intérieur du Garden et de cartographier ses capacités.
DiamondLoupeBase.sol et DiamondLoupeFacet.sol#
Ces contrats implémentent l'interface standard IDiamondLoupe. Étant donné que les capacités d'un Garden peuvent évoluer dans le temps (via des mises à jour), les interfaces utilisateur devraient utiliser ces fonctions pour vérifier qu'un Garden prend en charge une action spécifique avant d'envoyer une transaction.
Il implémente également IERC165, permettant à d'autres contrats d'interroger supportsInterface(bytes4).
Fonctions d'introspection clés pour les Builders :
facets(): Retourne toutes les adresses de facettes actives et leurs sélecteurs de fonctions regroupés.facetFunctionSelectors(address _facet): Retourne toutes les fonctions regroupées dans une facette spécifique.facetAddress(bytes4 _functionSelector): Retourne l'adresse exacte de la facette qui gère une fonction spécifique.
Extrait crucial : Interroger un Sélecteur
Les Builders peuvent l'utiliser pour vérifier dynamiquement si un Garden possède une fonctionnalité spécifique installée :
// From DiamondLoupeBase.sol
/// @notice Retrieves the facet that supports the given function selector
function _facetAddress(bytes4 _functionSelector) internal view returns (address facetAddress_) {
// Looks up the specific routing mapping in Diamond Storage
facetAddress_ = DiamondCutStorage.layout().selectorToFacetAndPosition[_functionSelector].facetAddress;
}DiamondLoupeStorage.sol#
Stocke les mappages pour la détection d'interface ERC-165 (mapping(bytes4 => bool) supportedInterfaces). Ceci est initialisé lors du premier déploiement du Garden.