Saltar al contenido principal

Ownership

El módulo de propiedad (ownership) proporciona el control administrativo estándar ERC-173, pero almacena el estado de forma segura dentro del patrón Diamond Storage para evitar colisiones durante las actualizaciones.

Concepto Central: Integración del Estándar ERC-173

Este módulo proporciona el control de acceso base para el Garden. El propietario (normalmente el usuario o una DAO) tiene el derecho de gestionar el Garden cuando opera de forma independiente.

OwnershipFacet.sol y OwnershipBase.sol

  • OwnershipFacet expone las funciones externas transferOwnership(address) y owner().
  • La función transferOwnership está protegida por el modificador onlyGardenOwner, asegurando que solo el administrador actual pueda transferir el control.

OwnershipStorage.sol

Como todas las variables de estado en Blok Capital, la dirección del propietario se almacena en un slot determinista para garantizar que sobreviva a las actualizaciones sin corrupción de memoria.

Fragmento crucial para Builders: Disposición del Almacenamiento de Ownership

/// @dev Storage slot is derived from keccak256(bytes("OwnershipStorage"))
struct Layout {
/// @notice Address of the owner. When zero, no owner is set (renounced).
address owner;
}

function layout() internal pure returns (Layout storage l) {
bytes32 position = LibStorageSlot.deriveStorageSlot(type(OwnershipStorage).name);
assembly {
l.slot := position
}
}