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

Este módulo gestiona las actualizaciones de estado dentro del Diamond, pero aplica el estricto modelo de seguridad "Registry-First" de Blok Capital.

Este módulo gestiona las actualizaciones de estado dentro del Diamond, pero aplica el estricto modelo de seguridad "Registry-First" de Blok Capital.

DiamondCutBase.sol#

Este es el motor interno para todas las actualizaciones. A diferencia de los Diamonds estándar que aceptan direcciones de facetas arbitrarias, el DiamondCutBase de Blok Capital obliga a que cada actualización sea validada contra el FacetRegistry global.

Conclusión clave para Builders: Un Garden no puede añadir una faceta a menos que esté incluida en la lista blanca global y su módulo esté explícitamente permitido para ese tipo concreto de Garden.

Fragmento crucial: Verificación de seguridad del 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 (El Escudo)#

En una implementación estándar de EIP-2535, el propietario puede llamar a la función diamondCut para actualizar el contrato. En Blok Capital, esta función está bloqueada intencionalmente. Esta faceta se incluye para satisfacer los requisitos de la interfaz EIP-2535, pero obliga a que todas las actualizaciones reales pasen por un flujo de actualización personalizado y altamente controlado (probablemente a través de un UpgradeFacet no mostrado aquí), evitando ambigüedades y errores humanos.

Fragmento crucial: El revert intencional

/// @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#

Define la disposición de almacenamiento estándar de EIP-2535 necesaria para rastrear las direcciones de las facetas y sus selectores de funciones asociados.

  • Patrón de Almacenamiento: Utiliza LibStorageSlot.deriveStorageSlot(type(DiamondCutStorage).name) para garantizar que la disposición de almacenamiento nunca colisione con otras facetas.