Skip to content

For AI agents: a documentation index is available at /llms.txt. Every page is also available as Markdown at the same URL with a .md suffix, or by requesting Accept: text/markdown.

BLOK Capital

Cut

Ce module gère les mises à jour d'état au sein du Diamond, mais applique le modèle de sécurité strict « Registry-First » de Blok Capital.

Ce module gère les mises à jour d'état au sein du Diamond, mais applique le modèle de sécurité strict « Registry-First » de Blok Capital.

DiamondCutBase.sol#

Il s'agit du moteur interne pour toutes les mises à jour. Contrairement aux Diamonds standard qui acceptent des adresses de facettes arbitraires, le DiamondCutBase de Blok Capital impose que chaque mise à jour soit validée par rapport au FacetRegistry global.

À retenir pour les Builders : Un Garden ne peut ajouter une facette que si elle figure sur la liste blanche globale et que son module est explicitement autorisé pour ce type de Garden spécifique.

Extrait crucial : Vérification de sécurité du Registry

// From addFunctions() in DiamondCutBase.sol
// Ensure facet's module is allowed for this garden's type
bytes32 gardenType = ld.gardenType;
if (gardenType != bytes32(0)) {
    bytes32 moduleId = IFacetRegistry(facetRegistry).getFacetModule(_facetAddress);
    if (!IFacetRegistry(facetRegistry).isModuleAllowedForGardenType(gardenType, moduleId)) {
        revert DiamondCut_ModuleNotAllowedForGardenType(gardenType, moduleId);
    }
}

DiamondCutFacet.sol (Le Bouclier)#

Dans une implémentation EIP-2535 standard, la fonction diamondCut peut être appelée par le propriétaire pour mettre à jour le contrat. Chez Blok Capital, cette fonction est intentionnellement bloquée. Cette facette est incluse pour satisfaire les exigences d'interface de l'EIP-2535, mais elle force toutes les mises à jour réelles à passer par un flux de mise à jour personnalisé et fortement contrôlé (probablement via un UpgradeFacet non montré ici), évitant ainsi toute ambiguïté et erreur humaine.

Extrait crucial : Le revert intentionnel

/// @inheritdoc IDiamondCut
function diamondCut(
    FacetCut[] memory _diamondCut,
    address _init,
    bytes calldata _calldata
)
    external
    override
    onlyGardenOwner
    ifIndexNotConnected
{
    // Blocked intentionally to force controlled upgrade paths
    revert DiamondCutFacet_DiamondCutNotAllowed();
}

DiamondCutStorage.sol#

Définit la disposition de stockage standard EIP-2535 nécessaire pour suivre les adresses de facettes et leurs sélecteurs de fonctions associés.

  • Modèle de Stockage : Utilise LibStorageSlot.deriveStorageSlot(type(DiamondCutStorage).name) pour garantir que la disposition de stockage n'entre jamais en collision avec d'autres facettes.